我正在尝试重写以下内容
http://example.com/somefile?variable=somevariable
到
index.php?processurl=/somefile?variable=somevariable
我知道我需要使用[QSA]传递变量,所以我在htaccess中写了以下内容:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*) index.php?processurl=/$1 [QSA]
然而,这个RewriteRule似乎没有传递变量。我得到的只是index.php?processurl = / somefile
答案 0 :(得分:1)
您可以尝试以下规则:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?processurl=/$1 [QSA,L]
答案 1 :(得分:1)
问题在于您对QSA
标志的理解。这样做是将原始查询字符串附加到重定向的URL。这在您希望将另一个参数(或多个参数)附加到查询字符串的某些情况下非常有用。
<小时/>
鉴于URL:
http://example.com/?var1=somevalue
然后重写规则:
RewriteRule . /?var2=thisvalue
RewriteRule . /?var2=thisvalue [`QSA`]
输出:
Rule 1 > http://example.com/?var2=thisvalue
Rule 2 > http://example.com/?var2=thisvalue&var1=somevalue
在您的情况下,问题是您不希望将查询字符串附加为要将其作为变量附加的查询字符串;如果这是有道理的......
然后解决方案是 - 听起来很简单 - 将查询字符串附加为变量...
您可以使用变量%{QUERY_STRING}
:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*) index.php?processurl=/$1?%{QUERY_STRING}
正如anubhava指出你可能想补充一下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
这样你就不会意外地重写错误的网址。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?processurl=/$1?%{QUERY_STRING}