如何阻止我的index.php为每个用户运行两次

时间:2016-02-08 18:16:01

标签: php apache .htaccess mod-rewrite

我们有一个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请求。

1 个答案:

答案 0 :(得分:1)

请尝试上一条规则:

RewriteRule ^hotels/([^/]+)/?$ index.php?d=$1 [NC,QSA,L]

或者用

捕获错误的请求
RewriteRule ^hotels/((?!undefined)[^/]+)/?$ index.php?d=$1 [NC,QSA,L]