htaccess不会将请求重定向到php脚本

时间:2018-08-24 02:00:26

标签: php apache .htaccess nginx

我有2个vps:

  1. Centos 7 / Php 7.0 / Apache 2.4.6
  2. Ubuntu 18 / PHP 7.2 / Apache 2.4.29

两者都安装了VestaCP相同的配置(apache为后端,nginx为前端)。

有相同的脚本,在第二台服务器上不起作用。

.htaccess规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$ [NC]
RewriteCond %{REMOTE_ADDR} !^(127.0.0.1)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (bad|useragents) [NC]
RewriteRule (.*) script.php?src=$1 [L]
</IfModule>

注意:

  • apache mod_rewrite已启用并且可以运行
  • 直接执行脚本作品

可能是什么?我尝试调试apache日志,以查找请求未重定向的原因,但是apache LogLevel debug没有显示任何错误。

1 个答案:

答案 0 :(得分:1)

如@Phil所说,问题出在REMOTE_ADDR

在工作的服务器头上:

[HTTP_X_FORWARDED_FOR] => CLIENT_IP
[SERVER_NAME] => sitename.org
[SERVER_ADDR] => SERVER_IP
[SERVER_PORT] => 80
[REMOTE_ADDR] => CLIENT_IP

服务器无法正常工作

[HTTP_X_REAL_IP] => CLIENT_IP
[HTTP_X_FORWARDED_FOR] => CLIENT_IP
[SERVER_NAME] => sitename.org
[SERVER_ADDR] => SERVER_IP
[SERVER_PORT] => 80
[REMOTE_ADDR] => SERVER_IP

如您所见,“不工作”的服务器返回标头SERVER_ADDRREMOTE_ADDR的服务器IP。

因此,要使其正常工作,我的代码是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$ [NC]
RewriteCond %{HTTP_X_REAL_IP} !^(127.0.0.1)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (bad|useragents) [NC]
RewriteRule (.*) script.php?src=$1 [L]
</IfModule>

现在的问题是-如何将客户端IP放入REMOTE_ADDR或更好地修复.htaccess并将其更改为HTTP_X_REAL_IP? 哪种方法是“正确的方法”?我还没有找到快速的解决方案,目前只是将htaccess更改为HTTP_X_REAL_IP