【问题标题】:Problem with htaccess URL rewrite rule, query string is being appended to resulting URLhtaccess URL 重写规则有问题,查询字符串被附加到结果 URL
【发布时间】:2010-08-02 16:03:22
【问题描述】:

我有一组重写规则,它们应该处理具有 1 到 5 个参数的 URL。所以我的 URL 可能如下所示: www.site.com/topic1/page1 或 www.site.com/topic1/sub1/page1。

这是我在这个例子中的规则:

RewriteRule ^([^/.]+)/?$ /staticpages/process-selection.php?param1=$1 [E=rwdone:yes,L]
RewriteRule ^([^/.]+)/([^/.]+)/?$ /staticpages/process-selection.php?param1=$1&param2=$2 [E=rwdone:yes,L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/]+)/?$ /staticpages/process-selection.php?param1=$1&param2=$2&param3=$3 [E=rwdone:yes,L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/]+)/([^/]+)/?$ /staticpages/process-selection.php?param1=$1&param2=$2&param3=$3&param4=$4 [E=rwdone:yes,L]
RewriteRule ^([^/.]+)/([^/.]+)/([^/]+)/([^/]+)/([^/]+)/?$ /staticpages/process-selection.php?param1=$1&param2=$2&param3=$3&param4=$4&param5=$5 [E=rwdone:yes,L]

更复杂的是,我可能会将 301 从旧 URL 重定向到这些新 URL 之一。所以“/topic1/page1/oldpage”可能首先被重定向到“/topic1/page1/newpage”。

由于某种原因,当重写发生时,浏览器中显示的 URL 具有正确的 URL,但旧变量附加到 url,如下所示: /topic1/page1/newpage?param1=page1&param2=oldpage

我想知道是否有任何方法可以避免这种情况。我到底做错了什么。

【问题讨论】:

    标签: apache .htaccess rewrite mod-rewrite


    【解决方案1】:

    mod_alias 工作时间晚于mod_rewrite,并且[L] 标志仅对mod_rewrite 规则有效,而不是mod_alias(即这些规则仍将应用于原始URL,但很奇怪显然与新的查询字符串)。要使mod_alias 能够查看已重写的 url,请使用[PT] 标志,或者尝试使用mod_rewrite 进行所有重写/重定向。

    【讨论】:

    • 非常感谢您的意见。我可以通过将重定向 301 代码更改为 RewriteRule ^url [R=301,L] 来解决问题。终于没有看到附加到我的浏览器网址的奇怪参数。
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多