RewriteRule - 循环重定向

时间:2010-10-29 18:24:59

标签: mod-rewrite loops

我需要帮助这两条重写规则:

RewriteEngine On
RewriteBase /

# folder/script.php?A=1&B=2  ->  xyz/1/2 (REDIRECT)
RewriteCond %{QUERY_STRING} ^A=([^&]+)&B=([^&]+)$
RewriteRule ^folder\/script\.php$ /xyz/%1/%2? [R=301,L]

# xyz/1/2  ->  folder/script.php?A=1&B=2 (REWRITE)
RewriteRule ^xyz\/([^\/]+)\/([^\/]+)$ /folder/script.php?A=$1&B=$2 [L]
  • 首先,我需要“重新审视” 来自:efectorelativo.net/folder/script.php?A=1&B=2
    TO:efectorelativo.net/xyz/1/2

  • 然后我需要“REWRITE”而不是“REDIRECT”
    来自:efectorelativo.net/xyz/1/2
    TO:efectorelativo.net/folder/script.php?A=1&B=2

编辑:(工作代码,感谢Gumbo)

RewriteEngine On
RewriteBase /

# folder/script.php?A=1&B=2  ->  xyz/1/2 (REDIRECT)
RewriteCond %{THE_REQUEST} \?A=([^&]+)&B=([^\s&]+)
RewriteRule ^folder\/script\.php$ /xyz/%1/%2? [R=301,L]

# xyz/1/2  ->  folder/script.php?A=1&B=2 (REWRITE)
RewriteRule ^xyz\/([^\/]+)\/([^\/]+)$ /folder/script.php?A=$1&B=$2 [L]

1 个答案:

答案 0 :(得分:1)

检查 THE_REQUEST 中的request line,而不是当前网址:

# folder/script.php?A=1&B=2  ->  xyz/1/2 (REDIRECT)
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?A=([^&]+)&B=([^&\ ]+)\ 
RewriteRule ^folder/script\.php$ /xyz/%1/%2? [R=301,L]