2016-09-17 101 views
1

我尝试这样的链接重定向:的.htaccess重写规则不重定向页面

http://spicyyeti.com/strangers/2

为它的等效:

http://spicyyeti.com/strangers/strangers.php?img=2

等在.htaccess香港专业教育学院写:

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

但是没有事情正在发生。我看不出有什么不对 - 我是按错误顺序写的吗?这里是我的全部的.htaccess以防万一有什么东西引发冲突的,我没有看到:顺便说一下,哪一个环节将在浏览器实际显示

# use php in html files i think 
AddHandler application/x-httpd-php5 .html 

DirectoryIndex home.html 

RewriteEngine On 

#removes html extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC] 

RewriteRule ^/strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [R=301] 

+0

你的第一条规则是匹配并重写'陌生人/ 2.html',我假设你的服务器上不存在,所以你会得到一个404. – Vrac

回答

1

你的第一条规则是要匹配和重写strangers/2.html,你需要一个条件,从第一条规则排除strangers URI:

RewriteBase/
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/strangers/.*$ 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

RewriteRule ^strangers/([0-9]+)$ /strangers/strangers.php?img=$1 [L] 

我从最后一个规则取出301标志。我假设你不想重定向到/strangers/strangers.php?img=2,而是在浏览器url栏中显示strangers/2,而apache执行/strangers/strangers.php?img=$1

+0

谢谢,这工作。我们如何从.html扩展删除中排除陌生人目录,但是在重写中我们引用了没有扩展名的模式? – carrmx

+0

'RewriteCond'只是一个与浏览器请求的字符串匹配,它不是指真正的目录。它将匹配任何以'/ strangers /'开头的URI,'。*'基本上是通配符。如果你愿意,你也可以在那里放置一个图案。重写小程序的第一个参数也是如此,它是与所请求的浏览器进行字符串匹配。你也可以把陌生人/(.*)$放在那里,它会采取任何与([0-9] +)相对的东西,它只能匹配和捕获从0到9的数字。 – Vrac