尝试使用.htaccess重定向任何包含index2的url,无论后来发生什么

时间:2012-06-18 13:13:21

标签: .htaccess mod-rewrite

我有遗产网址,如:

mysite.com/index2.php?option=com_mtree&task=print&link_id=383&Itemid=168

我想将任何包含index2.php的网址(无论index2.php之后的内容)重定向到mysite.com/my-nice-url

我试过

RewriteRule ^index2(.+) /my-nice-url/and-more/ [l,r=301]

但这使/my-nice-url/and-more/?option=com_mtree&task=print&link_id=383&Itemid=168成为我不想要的。有人可以提供一些指导吗?

2 个答案:

答案 0 :(得分:1)

1)重写规则模式只能是mathc 路径部分URL - 查询字符串必须单独匹配(通过RewriteCond)

2)默认情况下,如果新URL没有自己的查询字符串,则会将查询字符串传递给新URL。解决方案 - 提供空查询字符串(通过在URL末尾添加?):

RewriteRule ^index2\.php$ /my-nice-url/and-more/? [L,R=301]

答案 1 :(得分:0)

这应该有用,即使它不是你想要的:

RewriteRule ^/index2(.+)$ /my-nice-url/and-more/?

来自rewriterule Apache docs

  

注意:查询字符串

     

模式不会与查询字符串匹配。相反,你   必须使用带有%{QUERY_STRING}变量的RewriteCond。您可以,   但是,在替换字符串中创建包含查询的URL   字符串部分。只需在替换中使用问号   string,表示应重新注入以下文本   查询字符串。如果要删除现有查询字符串,请结束   替换字符串只有一个问号。结合一个新的   使用旧的查询字符串,使用[QSA]标志。