htaccess URL重写规则的问题,查询字符串被附加到结果URL

时间:2010-08-02 16:03:23

标签: apache .htaccess rewrite mod-rewrite

我有一组重写规则,它们应该处理一个包含1到5个参数的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到其中一个新网址。因此,“/ topic1 / page1 / oldpage”可能首先被重定向到“/ topic1 / page1 / newpage”。

出于某种原因,当重写发生时,浏览器中显示的URL具有正确的URL,但旧的变量附加到url,如下所示: / TOPIC1 /第1页/ NEWPAGE参数1 =第1页&安培; param2的= oldpage

我想知道是否有办法避免这种情况。我到底做错了什么。

1 个答案:

答案 0 :(得分:0)

mod_alias稍后使用mod_rewrite[L]标志仅对mod_rewrite规则有效,而不是mod_alias(即这些规则仍会应用到原始的URL,但显然与新的查询字符串相当奇怪)。要使mod_alias能够查看已经重写的网址,请使用[PT]标记,或者尝试使用mod_rewrite进行所有重写/重定向。