mod rewrite - 查询参数未正确处理

时间:2015-07-28 17:46:02

标签: php .htaccess mod-rewrite

以下是我的重写规则:

mRunComplete == true

当我输入网址blockingRunOnMain()时,无法识别查询参数($ _GET不包含任何内容)。

但是,当我点击我的网站中指向同一页面的链接时,会识别查询字符串,我可以通过$ _GET访问它。但浏览器窗口中的URL显示为Runnable

为什么会这样?我哪里错了?

修改

测试.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,QSA,L]
RewriteRule ^index\.(html?|php)$ http://%{HTTP_HOST}/ [R=301,QSA,L]
RewriteRule ^info/db$ info/db/index.php?kid=7 [L]
RewriteRule ^info/db/general$ info/db/general.php?kid=15 [L]

我打电话给u.php,其中包含:

www.mypage.com/info/db

一切正常。

我点击链接,然后在网址栏中显示:

www.mypage.com/info/db/?kid=7

Options -MultiViews RewriteEngine On RewriteRule ^abc_([0-9]+)$ abc.php?kid=$1 [NC, L] RewriteRule ^folder/abc_([0-9]+)$ folder/abc.php?kid=$1 [NC, L] RewriteRule ^folder$ folder/index.php?kid=2 [NC,L] 会在页面上回显,因为它应该:

<a href="abc_123">KLICK</a>

当我直接输入http://localhost/mystuff/abc_123 时,它也有效。

当我直接输入123时,页面上会显示<?php echo $_GET["kid"]; ?>

当我调用http://localhost/mystuff/abc_123时,查询字符串会在页面上传递并回显,但URL栏显示:

http://localhost/mystuff/folder/abc_123

重写规则是我现在唯一拥有的.htaccess。

1 个答案:

答案 0 :(得分:1)

您获得http://localhost/mystuff/folder/?kid=2因为folder是一个真实的目录,mod_dir模块在​​mod_rewrite运行后正在添加一个尾部斜杠。

您可以在RewriteEngine下方插入此新规则,以强制目录的尾部斜杠:

# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/mystuff/$1 -d
RewriteRule ^(.+?[^/])$ %{REQUEST_URI}/ [L,R=302]