2017-02-11 117 views
1

我尝试使用下面的阿帕奇重写规则阿帕奇重写规则是将请求发送两次

RewriteEngine On RewriteCond %{REQUEST_FILENAME} \.(php)$ RewriteRule ^/(.*)$ http://localhost.weebsy1.com:90/$1 [R=307,L]

这个规则的问题,以更改PHP文件的URL是,其发送的所有Ajax请求两次,第一次请求状态为307,下一个在某些浏览器中被取消。像ajaxRequests的截图如下:

enter image description here

请帮助我了解什么在重写规则去错了。提前致谢。

+0

显然,你有两个要求:第一击中了你的重写规则,得到回应与HTTP状态307,接下来打你重写的URL。 – arkascha

+0

好的,下一个请求被取消的原因是什么,这在Chrome和Mozilla中运行良好,问题出在Safari上。 –

+0

以及如何避免发送2个请求? –

回答

0

正如在评论中提到,你可以结合使用服务器内部重写与服务器端代理模块,以防止两个请求被发送:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} \.(php)$ 
RewriteRule ^/?(.*)$ http://example.com:90/$1 [P,END] 

如果您使用的是很旧版本的Apache http服务器,您可能必须用L标志替换END标志。

对于上述工作的一些前提条件必须满足:

  • 重写模块已启用,显然
  • 代理模块已启用

以上规则应在0​​风格动态配置文件,同样的主机配置部分工作。


另一种方法是使用代理模块:

<LocationMatch ^/(.*\.php)$> 
    ProxyRequests off 
    ProxyPass/http://example.com:90/ 
    ProxyPassReverse/http://example.com:90/ 
</LocationMatch> 

这种方法只适用于HTTP服务器的主机配置,动态配置文件。


一般提示:你应该总是喜欢在http服务器主机配置,而不是使用动态配置文件(“的.htaccess”)中这样的规则。这些文件出了名的错误,很难调试,他们真的放慢了服务器。它们仅作为最后一种选择,用于您无法控制主机配置的情况(阅读:真正便宜的托管服务提供商),或者您拥有依赖编写自己的重写规则的应用程序(这是一个明显的安全噩梦)。