如果以数字开头,则MOD_REWRITE清空QUERY_STRING

时间:2018-04-10 作者:nounours

我有一个简单的数据库查询脚本和WordPress安装,我使用以下URL向其传递一个参数:http://example.com/db/?p=foo.

我的数据库脚本读取参数时使用

$pid = $_GET[\'p\'];
如果参数不是以数字开头,则一切正常。

所以?p=foo 可以,但是?p=3poo 为空。

编辑:我通过将脚本更改为

<?php
print_r($_GET);
exit;
作为输出

Array ( )
我怀疑是mod\\u重写器抑制了以数字开头的参数。但我不知道为什么,以及如何改变这种行为。有什么想法吗?

编辑:不幸的是,我不能更改参数“p”的名称,也不能更改参数的值,使其不以数字开头,因为URL已经作为QR标记发布给公众,所以我需要一种解决方法来实现这一精确的URL。

这是我的.htaccess 根文件夹中的文件(按照MrWhite的建议编辑,按预期工作)

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

2 个回复
SO网友:nounours

多亏了汤姆,我才更仔细地查看了插件。

我可以确认,这个问题与mod\\u重写无关,而是与插件冲突有关。(很抱歉,我发布了这样的怀疑,但我在某处读到了一个非常类似的问题,就是这样解释的。)

一个接一个地停用插件,我发现你有这样的行为。仍然不知道为什么,但至少我现在有了一个解决方法:停用这个插件。

谢谢汤姆和所有其他人的帮助!

SO网友:nounours

最后,完全理解并解决了使用@MrWhite的建议使用mod\\u rewrite重写查询的问题。谢谢

要解释:

1) 我的http://example.com/db/?p=foo 是(我没有意识到这一点)实际上没有访问dbquery。php脚本,但有一个wordpress页面“db”,它调用dbquery。使用插件“INCLUDEME”的php脚本。

2) 因此,查询字符串首先由Wordpress处理(或者其他什么,我不知道正确的术语),而且正如@TomJ Nowell指出的那样,我的参数“p”有一个特殊的含义,它被“Wordpress”清空了,并且已经没有查询字符串用于插件。所以这不是插件的错。

3) 结论:问题不是mod\\u rewrite,不是插件,不是以数字开头的值,而是我使用了“p”这个简单的事实。

4) 解决方案包括:

a) 将WP页面“db”重命名为“nachverfolgbarkeit”

b) 创建名为“db”的目录

c) 放置a。数据库中的htaccess文件包含以下重定向,以从数据库重定向到新页面“nachverfolgbarkeit”(使用INCLUDEME调用dbquery.php);将参数从“p”修正为“pid”

不是很好的补丁,但效果很好。所以我给每个读者的建议是:“永远不要把p作为参数名”。。。

感谢所有人的帮助。名词我们的

RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=(.*)$
RewriteRule ^$ /nachverfolgbarkeit/?pid=%1   [R=301]

结束

相关推荐