我制作了自己的MVC应用程序。我在.htaccess
中使用以下rewriterrule:
RewriteEngine on
RewriteRule ^([a-zA-Z0-9'-'_'/]*)$ index.php?p=$1
然后当我进入这个url:
http://localhost/myapp/dahsboard/index
我得到变量$_GET['p']=dahsboard/index
&它的工作原理。
但是我用Ajax从jQueryUI使用AutoComplete,它发送一个变量$_GET['term']
与AutoComplete使用的输入值。
我的URL是:
http://localhost/myapp/dashboard/index?term='myvalue'
我的.htaccess
不解决它,我不知道如何。
简单。修改你的rewriterrule:
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
标志,将查询字符串延续到重写的目的地。
所以当你进入这个URL:
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
检查Apache报头,它应该告诉你它将通过Location:
报头发送URL到哪里:
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/
的额外路径信息添加到URL,我不是100%清楚为什么会发生这种情况。但是对于像这样的基本调试,您可以很好地阅读头,以看到index.php?p=index&term=myvalue
的最终目的地正在发送。一旦您知道了这一点,当您将这些规则投入生产时,请删除R
标志。
fww, http://localhost:8888/Applications/MAMP/
反映了我在Mac OS x中的本地MAMP设置,所以忽略它。你的本地设置很可能会返回100%不同的信息。但基本概念是坚实的。
要合并新旧查询字符串,请使用[QSA]标志。
RewriteEngine on
RewriteRule ^([a-zA-Z0-9'-'_'/]*)$ index.php?p=$1 [QSA]