【问题标题】:.htaccess redirect conflicts with another htaccess rule that I can not remove.htaccess 重定向与另一个我无法删除的 htaccess 规则冲突
【发布时间】:2010-08-28 00:56:56
【问题描述】:

信息:

所以我对 .htaccess 还很陌生,并且正在阅读一些内容。

基本上我想这样做,将网址 www.example.com/center-pro 重定向到 www.example.com/pro-hq (在这里找到方法.htaccess URL redirect

但是我正在处理的网站已经有一个 .htaccess 文件。

这就是我要添加的内容:

Options +FollowSymLinks  #already in htaccess file
RewriteEngine On         #already in htaccess file

Redirect 301 /center-pro http://www.example.com/pro-hq    #line I added


RewriteCond %{REQUEST_FILENAME} !-f   #already in htaccess file
RewriteCond %{REQUEST_FILENAME} !-d   #already in htaccess file
RewriteRule ^(.*) index.php?idstring=$1&%{QUERY_STRING}   #already in htaccess file

最后一行似乎与我的重定向搞乱了

所以我重定向的输出如下所示: www.example.com/pro-hq?idstring=center-pro

问题:

有没有办法让上面的重定向规则保留当前的.htaccees,这样我就不会弄乱当前的站点设置。

** 注意:执行 RewriteRule 有效,但我想使用重定向,这样人们就不会共享错误的 url。

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:

    您也可以使用mod_rewrite 进行外部重定向:

    RewriteRule ^center-pro$ http://www.example.com/pro-hq [R=301,L]
    

    这可能是最简单的解决方案,代替您当前的Redirect。问题是mod_rewritemod_alias 之前执行它的工作,虽然重写的URI 路径没有传递,但不幸的是修改后的查询字符串是。您还可以调节您的 RewriteRule 以防止它处理您希望由 mod_alias 处理的路径,但我更喜欢第一个选项:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond ${REQUEST_URI} !^/center-pro
    RewriteRule ^(.*) index.php?idstring=$1&%{QUERY_STRING}
    

    此外,对于您当前的RewriteRule,您可以只使用QSA 标志,而不是手动将查询字符串附加到 URL:

    RewriteRule ^(.*) index.php?idstring=$1 [QSA]
    

    【讨论】:

    • 太棒了 我之前厌倦了 RewriteRule (RewriteRule center-pro pro-hq [L]),但是 url 只是掩码,好像通过添加 R=301 url 改变了!第一行效果很好,感谢信息的深度,不会更改为 QSA 标志,因为我没有写那行。现在我需要去了解 ^ 和 $ 在 htaccess 土地上做什么。再次感谢
    • @theGoose - 没问题。就^$ 而言,它们只是用于测试模式的regular expression anchors,并分别匹配输入的开头和结尾(没有查询字符串的当前URL)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2012-06-09
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多