我们有一个webapp,其中使用apache和php提供初始html。
我最近注意到index.php正在为每个请求运行两次。这似乎是由我们的.htaccess -
中的重写规则引起/影响的RewriteCond %{HTTP_HOST} ^(www\.|hotels\.)ourdomain\.com$ [NC,OR]
RewriteCond %{SERVER_NAME} ^(www\.|hotels\.)ourdomain\.com$ [NC]
RewriteRule (.*) http://ourdomain.com/$1 [R=301]
RewriteRule ^hotels/([^/]+)/?\??(.*)$ ?d=$1&$2 [QSA]
最终规则是将参数从url路径移动到查询字符串。即。
http://ourdomain.com/hotels/vegas?someParam=1
变为
http://ourdomain.com?d=vegas&someParam=1
如果我直接查询字符串版本,则index.php只运行一次。但是,如果使用将被重定向的URL,则index.php将运行两次(我通过向文件添加error_log('end of index.php')
进行检查)。
例如,转到http://ourdomain.com/hotels/paris
会将文件击中两次,而http://ourdomain.com?d=paris
只会命中一次。
我见过this question并查看blog mentioned,我找不到任何空字符串url(我尝试过使用yslow进行此过程)。
有人能告诉我为什么会这样吗?或者我如何解决它?
修改
看起来这是一个javascript错误我在访问日志中收到"GET /hotels/undefined HTTP/1.1"
等http请求。
答案 0 :(得分:1)
请尝试上一条规则:
RewriteRule ^hotels/([^/]+)/?$ index.php?d=$1 [NC,QSA,L]
或者用
捕获错误的请求RewriteRule ^hotels/((?!undefined)[^/]+)/?$ index.php?d=$1 [NC,QSA,L]