URL Rewriting $_GET


URL Rewriting $_GET

我制作了自己的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]