为什么我的RewriteRules不能一起玩得很好?

时间:2011-11-10 17:10:54

标签: .htaccess mod-rewrite redirect

我的代码的第一部分工作并重定向/重写为new/file。当我尝试传递变量时出现问题。它们全部被重定向到new/file

我尝试将file.php?foo=bar重定向传递给new/file而不是new/file/bar的变量。

例如:

  • new / file重写为file.php
  • new / file / 2重写为file.php?page = 2
  • file.php重定向到新/文件
  • file.php?page = 2没有重定向到new / file / 2但是被覆盖到new / file而不是

我的代码:

RewriteBase /domain.com

#regular 
RewriteCond %{QUERY_STRING} !redirect=no
RewriteRule ^file\.php$ new/file? [NS,R=301,L]
RewriteRule ^new/file?$ file.php?redirect=no [NS]

#with variable
RewriteCond %{QUERY_STRING} ^page=([0-9-]+)/?$ 
RewriteRule ^file\.php$ new/file/%1?  [NS,R=301,L] 
RewriteRule ^new/file/([0-9-]+)/?$ file.php?page=$1&redirect=no [NS]

请注意,我传递的不仅仅是page个变量。

我想也许 QSA旗帜应该去某个地方?

1 个答案:

答案 0 :(得分:1)

RewriteCond %{QUERY_STRING} !redirect=no
RewriteRule ^file\.php$ new/file [NS,R=301,L]
RewriteRule ^new/file$ file.php?redirect=no [NS]

在第2行你有吗?这将替换当前的查询字符串,并且页面= 2将丢失。

在第3行你有一个?路径不包含问号。其次,问号被解释为“可选字母'e'”,因为它是一个RegEx。所以“/ new / fil”也可以(尝试一下)。