Apache.htaccess重定向问题

Apache.htaccess重定向问题,.htaccess,apache2,.htaccess,Apache2,我最近在Apache实例中遇到了一个非常奇怪的问题,我似乎找不到答案,我可能找错了地方 对于我的网站,我总是通过我的index.php(所有其他内容JS/CSS/PNG都通过一个单独的CDN)运行所有请求,所以我使用我的.htaccess重定向所有请求,就像这样 SetEnv SERVER_ADMIN admin@example.com SetEnv PHPRC /home/user ServerSignature email AddDefaultCharset UTF-8 DefaultLan

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

对于我的网站,我总是通过我的
index.php
(所有其他内容JS/CSS/PNG都通过一个单独的CDN)运行所有请求,所以我使用我的
.htaccess
重定向所有请求,就像这样

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]
我从
$\u服务器
变量,
$\u服务器['REQUEST\u URI']

我最近遇到了一个问题,当我尝试向我的Web服务器发送任何
请求\u方法时,请求变成
GET
,但只有在我的URL包含转义的
/
%2F
)时才是。调试此问题时,我将打印我的
$\u服务器
变量以查找以下内容:

example.com/%2F
(请注意,这不是一个后续的
/
问题,无论它在URL中的哪个位置,问题都会发生,我不会在代码中忽略它)

example.com
我还没有弄清楚为什么这个转义符号会导致额外的重定向,以及为什么它会改变请求方法。将我的
RewriteRule[L]
替换为
RewriteRule[P]
以代理请求,但这只会导致错误。声明代理规则应与外部URL一起使用


如果您有任何建议和/或帮助,我们将不胜感激。

通过进一步挖掘堆栈溢出,最终解决了问题

第一个想法是只读取
$\u服务器['REDIRECT\u REDIRECT\u METHOD']
,但我不建议这样做,因为事实证明,Apache在重定向过程中也强制执行
404
响应代码,这意味着任何编码为
%2F
的URL都返回为未找到(即使显示了我的页面内容)

答案来自

解决方案:
通过进一步挖掘堆垛溢流,最终解决了问题

第一个想法是只读取
$\u服务器['REDIRECT\u REDIRECT\u METHOD']
,但我不建议这样做,因为事实证明,Apache在重定向过程中也强制执行
404
响应代码,这意味着任何编码为
%2F
的URL都返回为未找到(即使显示了我的页面内容)

答案来自

解决方案:
{
  "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"
}
{
  "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_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": "DELETE",
  "REQUEST_URI": "/",
  "SCRIPT_NAME": "/index.php"
}
# Set this rule in .htaccess/httpd.conf
AllowEncodedSlashes NoDecode