我制作了自己的MVC应用程序。我在.htaccess
中使用了以下RewriteRule:
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
然后我去这个网址:
http://localhost/myapp/dahsboard/index
我得到变量$_GET['p']=dahsboard/index
&它有效。
但是我使用jQueryUI中的AutoComplete和Ajax,并使用AutoComplete使用的输入值发送变量$_GET['term']
。
我的网址是:
http://localhost/myapp/dashboard/index?term='myvalue'
我的.htaccess
无法解决问题而且我不知道该怎么做。
答案 0 :(得分:0)
要合并新旧查询字符串,请使用[QSA]标记。
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1 [QSA]
答案 1 :(得分:0)
易。从这个改变你的RewriteRule:
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
对此:
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1 [L,QSA]
使用QSA
flag将查询字符串转移到重写的目的地。
所以当你转到这个网址时:
http://localhost/myapp/dahsboard/index?term='myvalue'
它会像这样传递:
http://localhost/myapp/dahsboard/index.php?p=index&term=myvalue
如果我将以下内容放在index.php
:
<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>
返回的输出是:
Array
(
[p] => index
[term] => 'myvalue'
)
此外,如果您想轻松调试结果,除R
和L
之外,您还可以使用QSA
标记。 RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1 [L,R,QSA]
喜欢这样:
curl -I
然后运行Location:
检查Apache标头,它应该告诉您它将通过curl -I http://localhost:8888/myapp/dahsboard/index?term='myvalue'
HTTP/1.1 302 Found
Date: Tue, 17 Jun 2014 16:07:29 GMT
Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8r DAV/2 PHP/5.4.10
Location: http://localhost:8888/Applications/MAMP/htdocs/myapp/dahsboard/index.php?p=index&term=myvalue
Content-Type: text/html; charset=iso-8859-1
标头发送到哪里:
R
现在是的,/Applications/MAMP/htdocs/
标志将index.php?p=index&term=myvalue
的额外路径信息添加到URL我不是100%清楚为什么会发生这种情况。但是对于像这样的基本调试,你可以很好地阅读标题,看看是否发送了R
的最终目的地。一旦您知道这一点,请在将这些规则投入生产时删除http://localhost:8888/Applications/MAMP/
标志。
FWIW,{{1}}反映了我在Mac OS X中的本地MAMP设置。所以请忽略它。您的本地设置很可能会返回100%不同的信息。但基本概念是可靠的。