Mod rewrite 修改不需要第三条规则
我的mod_重写代码有问题。我希望重写基于3条规则:Mod rewrite 修改不需要第三条规则,mod-rewrite,apache2,Mod Rewrite,Apache2,我的mod_重写代码有问题。我希望重写基于3条规则: 如果它不是已知文件(图像、xml),请重新路由到index.php(对于Zend MVC) 如果域名前没有www,请添加它 如果请求的url为www.domain.com/page/pagename,请重写为www.domain.com/page/show/id/pagename 到目前为止,我已经让前两个工作,但我似乎无法让第三个工作。这是我的代码: RewriteEngine on RewriteCond %{SCRIPT_FILENA
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php [QSA,L]
RewriteCond %{HTTP_HOST} ^fietsnl.nl
RewriteRule (.*) http://www.fietsnl.nl [R=301,L]
RewriteCond %{REQUEST_URI} ^page/([a-zA-Z_]+)$
RewriteRule ^page/([a-zA-Z_]+)$ /page/show/id/$1 [L]
如果我请求,它仍然会重新指向第一条规则
你能告诉我该改变什么吗
谢谢 规则按其出现的顺序匹配 我假设
page/pagename
不是现有的文件或目录,因此它将匹配第一条规则,并且不会处理任何其他规则
通常,您希望规则从最特定到最不特定进行排列,并且通常在重写之前进行重定向
一个简单的解决方法是将第一条规则移到末尾。中的L
RewriteRule (.*) index.php [QSA,L]
告诉mod_rewrite停止处理规则,以便在服务器上不存在文件的情况下永远不会处理下面两个规则
我不是mod_rewrite的高手,但通过将最后一条规则移到第一条规则之前,应该可以解决您的问题
RewriteEngine on
RewriteCond %{REQUEST_URI} ^page/([a-zA-Z_]+)$
RewriteRule ^page/([a-zA-Z_]+)$ /page/show/id/$1 [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php [QSA,L]
RewriteCond %{HTTP_HOST} ^fietsnl.nl
RewriteRule (.*) http://www.fietsnl.nl [R=301,L]
啊,谢谢你的解释。不过,我还是没有得到不得不去的结果。还有什么我搞砸了吗?我不是100%确定为什么(就像我说的我不是专家),但似乎
RewriteCond%{REQUEST\u URI}^page/([a-zA-Z]+)$
有问题。如果我去掉它,它在我的服务器上会像预期的那样工作。因此,%{REQUEST_URI}^/page/([a-zA-Z!+)$
应该可以工作。啊,它似乎路由正确,只有Zend MVC似乎接受原始值。谢谢你的帮助!