0

我在让我的 .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提供了非常出色的教程。我放入<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]
4

1 回答 1

2

您无法匹配 a 中的主机或查询字符串RewriteRule,您需要匹配指令中的%{HTTP_HOST}and%{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]

当有人去到时,这会重定向浏览器(更改地址栏中的 URL http://mysite.com/?action=viewArticle&articleId=15&categoryId=1http://mysite.com/essays/15

%{HTTP_HOST}如果您的 htaccess 文件仅服务于单个主机,则不需要该条件。

于 2012-09-20T02:07:54.357 回答