【问题标题】:Htaccess doesn't redirect request to php scriptHtaccess 不会将请求重定向到 php 脚本
【发布时间】:2019-01-30 11:08:37
【问题描述】:

我有 2 个 vps:

  1. Centos 7 / Php 7.0 / Apache 2.4.6
  2. Ubuntu 18 / PHP 7.2 / 阿帕奇 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 没有显示任何错误。

【问题讨论】:

  • 我怀疑的第一件事是 REMOTE_ADDR 解析为 127.0.0.1 由于您的前端。比较 NGINX 配置
  • 成功了!所有 REMOTE_ADDR 指令都不起作用。但为什么呢?

标签: php apache .htaccess nginx


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2014-09-19
    • 1970-01-01
    • 2016-11-30
    • 2012-11-16
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多