htaccess在两个几乎相同的情况下没有工作

时间:2012-03-03 18:52:48

标签: apache .htaccess mod-rewrite url-rewriting

此重写规则无效(重定向后id为空):

RewriteRule ^album/([0-9]+)$ album.php?id=$1 [L,QSA]

虽然这个:

RewriteRule ^album([0-9]+)$ album.php?id=$1 [L,QSA]

删除的斜线是唯一的区别。

2 个答案:

答案 0 :(得分:1)

这与多视图有关。多视图会绕过您重写规则,因为它会将/album/...与现有文件album.php匹配

您可以通过向{htaccess}添加Options -MultiViews来阻止此操作。

答案 1 :(得分:0)

这与处理.htaccess文件中的mod_rewrite规则的方式有关。基本上,RewriteRule的输入只是路径的“文件”部分,因此当网址为.../album/42时,RewriteRule将与42匹配。

解决方案是使用RewriteCondition。类似的东西:

RewriteCond %{REQUEST_URI} (.*)/album/([0-9]+)$
RewriteRule ^ %1/album.php?id=%2 [L,QSA]