我有一个简单的数据库查询脚本和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>
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]