我有以下.htaccess mod_rewrite规则:
RewriteEngine on
RewriteRule ^(abc1|abc2|abc3|abc-defg)/([^/]+)$ /redirect/category/$1/$2
RewriteRule ^(.+[^/])/$ /$1 [R=301,L]
现在我有以下网址:
http://www.example.com/abc-defg/cat1/
应该映射到
http://www.example.com/redirect/category/abc-defg/cat1
此规则适用于我的本地开发机器(Win7,Xampp),但不适用于生产服务器(使用Apache运行Ubuntu 12.04,mod_rewrite和mod_fcgid)。
在Ubuntu上,我被重定向到http://www.example.com/abc-defg/cat1
(删除" /",这是第二条规则)。
我怎样才能找出为什么它没有按预期工作?
答案 0 :(得分:0)
您必须在第一个规则之前放置301重定向规则:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])/$ /$1 [R=301,L,NE]
RewriteRule ^(abc1|abc2|abc3|abc-defg)/([^/]+)$ /redirect/category/$1/$2 [L,NC]
在新的浏览器中测试一下。
答案 1 :(得分:0)
你的正则表达式不匹配。
试试这个:
^(abc1|abc2|abc3|abc-defg)/([^/]+)/?$
您需要澄清它可以以斜线结尾。或者(但不推荐),不要用斜线结束。
www.example.com/abc-defg/cat1
与正则表达式匹配 - 所以我认为这是你之前使用的。
那说完全有可能用户会在最后放一个斜线,所以最好考虑到它。