以下是规则:
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} one_art=29$
RewriteRule (.*) http://www.pests.co.il/%ee%e0%ee%f8%e9%ed/%e4%e3%e1%f8%fa_%fa%e9%f7%f0%e9%ed_/29$1 [R=301,L]
如果我输入以下网址,一切正常,重定向有效:
http://www.pests.co.il/?one_art=29
如果我输入以下网址,则会重定向到错误的不存在的网址:
http://www.pests.co.il/index.php?one_art=29
重定向到:
http://www.pests.co.il/%25ee%25e0%25ee%25f8%25e9%25ed/%25e4%25e3%25e1%25f8%25fa_%25fa%25e9%25f7%25f0%25e9%25ed_/29index.php?one_art=29
为什么会发生这种情况?我删除了所有其他重写,以确保它没有其他干扰,但这仍然发生。
***** 编辑 ********
现在好多了。但是如果只是没有index.php的查询字符串,仍然无法重写:如果我这样做:
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} one_art=29$
RewriteRule (.*) pests.co.ilמאמרים/הדברת_תיקנים_/29? [R=301,NE,L]
然后带有index.php的url正确重写,但没有index.php的url不会改变。
如果我这样做,那么一切都行不通。请注意前三行与上面相同我只是添加了另外两行来处理没有index.php的url:
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} one_art=29$
RewriteRule (.*) pests.co.ilמאמרים/הדברת_תיקנים_/29? [R=301,NE,L]
RewriteCond %{QUERY_STRING} one_art=29$
RewriteRule (.*) pests.co.ilמאמרים/הדברת_תיקנים_/29? [R=301,NE,L]
答案 0 :(得分:2)
为什么会发生这种情况?
是
(.*)
在域和可选斜杠之后以及查询字符串之前捕获URL的一部分到组1。...ed_/29$1
在重写的网址http://www.pests.co.il/?one_art=29
,则第1组为空,因此不会添加任何内容http://www.pests.co.il/index.php?one_art=29
,则第1组为index.php
,并在“... ed_ / 29` 答案 1 :(得分:1)
默认情况下,mod_rewrite将转义特殊字符,例如% - 变为%25,因此%ee变为%25ee等。阅读noescape flag。您的规则应该包含标记[R=301,NE,L]