在 htaccess 中使用 _escaped_fragment_ 可抓取的 AJAX

各位开发者好!

我们几乎完成了 ajax 网络应用程序的第一阶段的开发.在我们的应用程序中,我们使用哈希片段,如:

We are almost finished with developing first phase of our ajax web app. In our app we are using hash fragments like:

http://ourdomain.com/#!list=last_ads&order=date

我知道谷歌会获取这个 url 并以这种形式向服务器发出请求:

I understand google will fetch this url and make a request to the server in this form:

http://ourdomain.com/?_escaped_fragment_=list=last_ads?order=date&direction=desc

一切都很完美,除了……

everything is perfect, except...

我想将这种请求路由到另一个脚本

I would like to route this kind of request to another script

像这样:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php$1 [L]

问题是,当我尝试在 crawler.php 中打印_r($_REQUEST) 时,我只得到:

The problem is, that when I try to print_r($_REQUEST) in crawler.php I get only:

Array
(
    [_escaped_fragment_] => list=last_ads?order=date
    [direction] => desc
)

我想要的是

Array
(
    [list] => last_ads
    [order] => date
    [directions] => des
)

我知道我可以使用 php 来进一步打破第一个参数,但我不想 ;)

I know I could use php to further break the first argument, but I don't want to ;)

请指教

====================================================编辑...文本和逻辑中的一些更正

==================================================== EDIT... some corrections in text and logic

推荐答案

你忘记了 QSA 指令(大家都错过了点 =D)

Your forgot QSA directive (everyone missed the point =D )

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php%1 [QSA,L]

顺便说一下,你的 $1 是错误的......没用,因为它没有指代任何东西.所以这应该是:

By the way your $1 is well err... useless because it refers to nothing. So this should be:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php [QSA,L]

告诉我这是否有效.

相关文章