Apache .htaccess重定向问题

时间:2019-05-07 18:08:18

标签: .htaccess apache2

我最近在我的Apache实例中遇到了一个非常奇怪的问题,我似乎找不到答案,我可能在错误的地方找了东西。

对于我的网站,我始终通过index.php运行所有请求(所有其他内容JS / CSS / PNG都通过单独的CDN),因此我使用.htaccess重定向 all < / em>这样的请求

SetEnv SERVER_ADMIN admin@example.com
SetEnv PHPRC /home/user
ServerSignature email
AddDefaultCharset UTF-8
DefaultLanguage en-US

# Enable Rewriting
RewriteEngine on
RewriteBase /

Options +FollowSymlinks
Options All -Indexes

# Do not redirect these directories
RewriteRule sitemap.xml - [L]
RewriteRule robots.txt - [L]

# Redirect to index
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^.*$ index.php [L]

我读取了$_SERVER变量$_SERVER['REQUEST_URI']

提供的路径

我最近遇到一个问题,当我尝试将任何REQUEST_METHOD发送到我的Web服务器时,请求变成了GET,但是 仅当 我的URL包含转义的/%2F)。在调试此问题时,我print_r的{​​{1}}变量可以找到以下内容:

$_SERVER的{​​{1}}请求

(请注意,这不是尾随DELETE的问题,无论URL中的位置如何,都会发生此问题,并且我也不会在代码中转义它)

example.com/%2F

/的{​​{1}}请求

{
  "REDIRECT_REDIRECT_REDIRECT_REQUEST_METHOD": "DELETE",
  "REDIRECT_REDIRECT_REDIRECT_STATUS": "200",
  "REDIRECT_REDIRECT_SERVER_ADMIN": "admin@example.com",
  "REDIRECT_REDIRECT_PHPRC": "/home/user",
  "REDIRECT_REDIRECT_HTTPS": "on",
  "REDIRECT_REDIRECT_SSL_TLS_SNI": "www.example.com",
  "REDIRECT_REDIRECT_STATUS": "200",
  "REDIRECT_HTTP_AUTHORIZATION": "",
  "REDIRECT_SERVER_ADMIN": "admin@example.com",
  "REDIRECT_PHPRC": "/home/user",
  "REDIRECT_HTTPS": "on",
  "REDIRECT_SSL_TLS_SNI": "www.example.com",
  "REDIRECT_STATUS": "200",
  "HTTPS": "on",
  "SSL_TLS_SNI": "www.example.com",
  "HTTP_HOST": "www.example.com",
  "REQUEST_METHOD": "GET",
  "REQUEST_URI": "/%2F",
  "SCRIPT_NAME": "/index.php"
}

我还没有找到为什么这个转义的符号会引起额外的重定向,以及为什么它改变了请求方法。 I came across one suggestion on SO将我的DELETE替换为example.com来代理请求,但这仅引起错误。 RewriteRule Flags documentation声明代理规则应与外部URL一起使用。

任何建议和/或帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

最后,通过进一步研究StackOverflow解决了该问题。

第一个想法只是阅读$_SERVER['REDIRECT_REDIRECT_METHOD'],但我建议这样做,因为事实证明,Apache在重定向期间也强制使用404响应代码,表示所有编码为%2F的URL都以未找到的形式返回(即使显示了我的页面内容)。

答案来自this other question

解决方案:

# Set this rule in .htaccess/httpd.conf
AllowEncodedSlashes NoDecode