.htaccess 为什么赢了';我的规则不是很好吗?

.htaccess 为什么赢了';我的规则不是很好吗?,.htaccess,mod-rewrite,redirect,.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 php重定向到new/file php?page=2不会重定向到new/file/2,而是将get覆盖到new/file 我的代码: Rewrite

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

无论我试图在
file.php?foo=bar中传递什么变量,它都会重定向到
new/file
,而不是
new/file/bar

例如:

  • new/file重写为file.php
  • new/file/2重写为file.php?page=2
  • php重定向到new/file
  • php?page=2不会重定向到new/file/2,而是将get覆盖到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]
请注意,我传递的不仅仅是
页面
变量

我在想,也许QSA标志应该在某处出现

RewriteCond %{QUERY_STRING} !redirect=no
RewriteRule ^file\.php$ new/file [NS,R=301,L]
RewriteRule ^new/file$ file.php?redirect=no [NS]
在第二行你有?。这将替换当前的查询字符串,并且page=2将丢失


在第三行你有一个?。路径不包含问号。其次,问号被解释为“可选字母‘e’”,因为它是正则表达式。所以“/new/fil”也可以(试用)。

谢谢您的回复。如果我把第二行的问号去掉,我会被重定向到
new/file?page=2
,但它会停留在new/file而不是第2页。您应该将“常规”规则移到“with variable”规则之后。