我的htaccess中有以下代码。该网站工作正常(即:没有500错误),但它没有在我的网址中添加尾部斜杠:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?$1 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://staging.foo.com/$1/ [L,R=301]
</IfModule>
这里有什么问题?
答案 0 :(得分:0)
您需要交换规则的顺序
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://staging.foo.com/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?$1 [NC,L]
</IfModule>
它无效的原因是因为路由到/index.php
规则正在应用第一个,然后重写引擎循环,然后是第二个规则(重定向规则)将不会被应用,因为URI已被重写为/index.php
并导致%{REQUEST_FILENAME} !-f
失败,因为index.php
存在,因此,重定向永远不会发生。