【问题标题】:Rewrite/Forward URL in both directions ends in loop双向重写/转发 URL 以循环结束
【发布时间】:2014-03-02 00:02:28
【问题描述】:

我想重写或双向转发两个 URL,因为使用的软件不允许在调用的 URL 中进行这种更改。

被调用的 URL 是“https://example.com/customerarea/cart.php?a=view”,应该转发到https://example.com/cart/https://example.com/cart/ 被重写为被调用的 URL。

将“cart/”重写为“customerarea/cart.php?a=view”:

RewriteRule ^cart/$ customerarea/cart.php?a=view [QSA,L]

这条规则有效。

如果我添加以下条件和规则以从“customerarea/cart.php?a=view”转发到“cart/”,它将以连续循环结束。

RewriteCond %{REQUEST_URI} ^/customerarea/cart.php$
RewriteRule ^(.*)$ https://example.com/cart/ [R=301,L]

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite redirect


    【解决方案1】:

    你需要两条这样的规则:

    RewriteCond %{THE_REQUEST} \s/+customerarea/cart\.php\?a=view [NC]
    RewriteRule ^ /cart/? [R=301,L]
    
    RewriteRule ^cart/$ /customerarea/cart.php?a=view [QSA,L]
    

    【讨论】:

    • 太棒了!谢谢你。你能解释一下第一个条件和规则,特别是为什么一个空间如此重要吗?
    • 在第一个规则空间中并不重要,但使用%{THE_REQUEST} 很重要,在执行重写规则后它的值不会改变。
    • 为什么第二条规则中的空格如此重要?我就是这个意思。
    • 第一条规则中有\s/ 检查它的存在%{THE_REQUEST} 是你在问吗?
    • 不,我指的是第二条规则中的空格,在 ^ 和 /cart/? 之间。没有那个空间,它以一个连续的循环结束,有了这个空间,它就很好用。这就是为什么我对空间如此重要感到惊讶的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2020-04-05
    相关资源
    最近更新 更多