让我的.htaccess ReWrite在我的apache web服务器上运行时遇到了很多麻烦。我已经阅读了几个教程并测试了我的正则表达式与Grep匹配。
以下是代码:
RewriteRule \?action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])$ essays/$1 [R=301,L]
这是我想要匹配的网址:
http://mysite.com/?action=viewArticle&articleId=15&categoryId=1
并改为
http://mysite.com/essays/15
更新:解决方案!来自Jon的excellent tutorial。我将<base href="/">
放在头文件中以使css正常工作非常重要。
最终重写看起来像这样:
RewriteCond %{THE_REQUEST} /?action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])
RewriteRule ^$ /essays/%1? [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^essays/([0-9]+) /?action=viewArticle&articleId=$1&categoryId=([0-9]) [L]
答案 0 :(得分:2)
您无法匹配RewriteRule
中的主机或查询字符串,您需要与%{HTTP_HOST}
指令中的%{QUERY_STRING}
和RewriteCond
变量匹配:
RewriteCond %{HTTP_HOST} mysite\.com$ [NC]
RewriteCond %{QUERY_STRING} ^action=viewArticle&articleId=([0-9]*)&categoryId=([0-9])$
RewriteRule ^$ /essays/%1? [L,R=301]
当有人转到http://mysite.com/?action=viewArticle&articleId=15&categoryId=1
到http://mysite.com/essays/15
时,会重定向浏览器(更改地址栏中的网址)
如果您的htaccess文件仅为单个主机提供服务,则不需要%{HTTP_HOST}
条件。