gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:51:34 25 4
gpt4 key购买 nike

我正在尝试重写以下内容

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

最佳答案

问题

问题在于您对 QSA 的理解旗帜。它所做的是将原始查询字符串附加到重定向的 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}

关于apache - 使用重写规则通过 htaccess 传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com