我正在尝试使用以下apache重写规则更改PHP文件的URL
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.(php)$
RewriteRule ^/(.*)$ http://localhost.weebsy1.com:90/$1 [R=307,L]
此规则的问题在于它发送所有ajax请求两次,第一个请求状态为307,而下一个请求在某些浏览器中被取消。如下面的ajaxRequests截图:
请帮助我了解重写规则中出错的原因。提前谢谢。
答案 0 :(得分:0)
如评论中所述,您可以将服务器内部重写与服务器端代理模块结合使用,以防止发送两个请求:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.(php)$
RewriteRule ^/?(.*)$ http://example.com:90/$1 [P,END]
如果您使用的是非常旧版本的apache http服务器,则可能必须使用END
标志替换L
标志。
为了实现上述目标,必须满足一些先决条件:
上述规则同样适用于.htaccess
样式动态配置文件中的主机配置部分和。
另一种方法是使用仅代理模块:
<LocationMatch ^/(.*\.php)$>
ProxyRequests off
ProxyPass / http://example.com:90/
ProxyPassReverse / http://example.com:90/
</LocationMatch>
此方法仅适用于动态配置文件中的http服务器主机配置,不。
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。