Apache.htaccess重定向问题
我最近在Apache实例中遇到了一个非常奇怪的问题,我似乎找不到答案,我可能找错了地方 对于我的网站,我总是通过我的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
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