PHP $_REQUEST array empty

时间:2016-09-27 作者:Steve Taylor

我有一个非常奇怪的问题:

我有一个WP站点,登台和直播在同一台服务器上

1 个回复
SO网友:bosco

缺少GET请求变量有时是web服务器配置文件中不正确重写规则的症状。对于Apache,重写通常使用mod_rewrite WordPress安装目录级别中的模块指令.htaccess 配置文件-但是,更高级别的配置文件(目录、vhost、主配置等)中也可能存在错误的重写规则。

默认情况下,WordPress会将除现有文件和目录之外的所有请求路由到index.php 使用类似以下的配置:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
有两种修改会导致这些指令在重写请求的过程中删除querystring:

discard querystring flag. 这将添加到RewriteRule 指令作为QSDqsdiscard. 如果此标志存在于RewriteRule 在上面的配置中,几乎每个由WordPress处理的请求都会丢弃查询字符串。例如:

RewriteRule ^index\\.php$ - [L,QSD]
任何使用? 在a中RewriteRule 指令的替换字符串(不带append querystring flag). 指定任何查询字符串(即使是单个? 如果没有任何后续键/值对),则替换将导致重写完全替换原始查询字符串。例如:

RewriteRule . /index.php? [L]

RewriteRule . /index.php?foo=bar [L]
如果希望在每次重写时都附加一个自定义GET变量,则可以在括号中指定append querystring标志,如下所示QSAqsappend 要将替换中的查询字符串与原始查询字符串合并,而不是完全覆盖它,请执行以下操作:

RewriteRule . /index.php?foo=bar [L,QSA]