.htaccess 使用重写规则通过htaccess传递变量

oipij1gg  于 2022-11-25  发布在  其他
关注(0)|答案(2)|浏览(158)

我尝试重写以下内容

http://example.com/somefile?variable=somevariable

index.php?processurl=/somefile?variable=somevariable

我知道我需要使用[QSA]来传递变量,所以我在htaccess中编写了以下代码:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*) index.php?processurl=/$1 [QSA]

然而这个重写规则似乎没有传递变量。我得到的只是index.php?processurl =/somefile

gdx19jrr

gdx19jrr1#

问题

问题在于您对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}

建议

正如阿努哈瓦所指出的,你也许要补充一句:

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}
tsm1rwdh

tsm1rwdh2#

您可以尝试以下规则:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?processurl=/$1 [QSA,L]

相关问题