我有一个网址" / test / index?p = 1"以及以下apache重写规则(使用FuelPHP Framework):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# deal with php5-cgi first
<IfModule mod_fcgid.c>
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
<IfModule !mod_fcgid.c>
# for normal Apache installations
<IfModule mod_php5.c>
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
# for Apache FGCI installations
<IfModule !mod_php5.c>
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
</IfModule>
在index.php中,我只是这样做:
print_r($_GET);
print_r($_REQUEST);
print_r($_SERVER);
在我的本地Xamp安装(带有mod_php5的Windows)上,我得到以下输出:
// print_r($_GET);
Array
(
[p] => 1
)
// print_r($_REQUEST);
Array
(
[p] => 1
)
// print_r($_SERVER);
....
[QUERY_STRING] => p=1
[REQUEST_URI] => /test/index?p=1
[SCRIPT_NAME] => /index.php
...
好的,这就是我的期望。但是在我的Ubuntu 12.04服务器上(使用FastCGI),我得到了:
// print_r($_GET);
Array
(
[/test/index] =>
[p] => 1
)
// print_r($_REQUEST);
Array
(
[/test/index] =>
[p] => 1
)
// print_r($_SERVER);
...
[QUERY_STRING] => /test/index&p=1
[REQUEST_URI] => /test/index?p=1
[SCRIPT_NAME] => /index.php
...
所以问题是,$ _GET不仅会返回&#34; p&#34;还会&#34; / test / index&#34;。
任何想法如何解决?
答案 0 :(得分:0)
这是因为在您的Ubuntu 12.04服务器上它正在访问此块:
<IfModule !mod_php5.c>
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
原因可能是您没有在Apache中加载mod_php5
模块。
由于您使用$_GET
标记,您在QSA
中获得了2个元素。 QSA
(查询字符串追加)标志在添加新查询参数时保留现有查询参数。因此,对于/test/index?p=1
的URI,您将获得:
p=12
(预先存在的查询字符串)/test/index
(/$1
的抓取值)要更改此行为,您可以将.htaccess保留为:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# deal with php5-cgi first
<IfModule mod_fcgid.c>
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
<IfModule !mod_fcgid.c>
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>