你好开发人员了!
我们几乎完成了开发我们的ajax web应用程序的第一阶段。 在我们的应用程序中,我们使用哈希片段,如:
http://ourdomain.com/#!list=last_ads&order=date
我了解google会获取此网址并以此格式向服务器发出请求:
http://ourdomain.com/?_escaped_fragment_=list=last_ads?order=date&direction=desc
一切都很完美,除了......
我想将此类请求发送到另一个脚本
像这样:RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php$1 [L]
问题是,当我在crawler.php中尝试print_r($ _ REQUEST)时,我只得到:
Array
(
[_escaped_fragment_] => list=last_ads?order=date
[direction] => desc
)
我想得到的是
Array
(
[list] => last_ads
[order] => date
[directions] => des
)
我知道我可以使用php来进一步打破第一个参数,但我不想;)
请告知
=============================================== ===== 编辑...文本和逻辑中的一些更正
答案 0 :(得分:3)
你忘记了QSA指令(每个人都错过了点= D)
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php%1 [QSA,L]
顺便说一下,你的$1
错误......没用,因为它没有任何意义。所以这应该是:
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php [QSA,L]
告诉我这是否有效。
答案 1 :(得分:1)
如果我没弄错的话。
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /webroot/crawler.php?%1 [L]
答案 2 :(得分:1)
也许对你很明显,但在文档中谈论转义字符: Set up your server to handle requests for URLs that contain
爬虫在转换过程中转义片段中的某些字符。要检索原始片段,请确保取消片段中的所有%XX字符。更具体地说,%26应该变成&,%20应该变成空格,%23应该变成#,%25应该变成%,依此类推。
答案 3 :(得分:0)
这是一个解决方案,它提供了可在服务器端脚本中正确设置的可路由URL和查询参数。
实施例:
如果您希望http://yoursite.com/#!/product/20
成为http://yoursite.com/crawler/product/20
首先在.htaccess
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /crawler/index.php?_frag=%1 [L]
我们需要删除URL中的_escaped_fragment_
并将其替换为不同的内容,例如:_frag
,以便(Apache)Web服务器不会进入循环重写。
crawler/index.php
<?php
if(array_key_exists('_frag', $_REQUEST)) {
$_SERVER['REQUEST_URI']=$_REQUEST['_frag'];
unset($_REQUEST['_frag']);
parse_str($_SERVER['QUERY_STRING'], $frag);
parse_str(preg_replace('/^.*\?/', '', $frag['_frag']), $_REQUEST);
$_SERVER['QUERY_STRING'] = http_build_query($_REQUEST);
}
// Continue with your usual script of routing
// $_REQUEST now contains the original query parameters
答案 4 :(得分:0)
在虚拟主机中的htaccess工作不起作用,所以我添加“目录”
<Directory "X:/DIR">
RewriteEngine On
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^$ /crawler/index.php?_frag=%1 [L]
</Directory>