如何解决RewriteRule-或document_root别名到子目录不重定向会导致错误请求或内部服务器错误
在对SO和SF进行详尽搜索之后,我发现这很令人担忧。所有相关的答案都导致Apache 2.4中断,我不知道我在做什么错,这应该非常简单。
为简洁起见,以下是代码,尽管我已经分别测试了每个代码,但并非全部都如下所示:
RewriteRule ^(.*)$ .anon.dir/Repo/data/native/fuse/$1 [L]
## Bad Request
RewriteRule .* .anon.dir/Repo/data/native/fuse/
## Bad Request
RewriteRule ^(.*)$ /.anon.dir/Repo/data/native/fuse/$1 [L]
## Internal Server Error
RewriteRule ^(.*)$ - [E=TRGT:".anon.dir/Repo/data/native/fuse/index.PHP"]
RewriteRule ^(.*)$ %{ENV:TRGT}
## Bad Request
## Alias / %{DOCUMENT_ROOT}/blah ... for vHost/apache conf only
## Internal Server Error - in htaccess
实际代码在<if>
块中,完全是这样:
<If "%{QUERY_STRING} =~ /(^|&)ANONFUSETEST($|&)/">
Options -MultiViews
RewriteEngine on
RewriteRule ^(.*)$ .anon.dir/Repo/data/native/fuse/$1 [L]
</If>
我使用的是Apache 2.4,目标子目录中没有htaccess
,只有index.PHP
文件,其中有<h1>It Works!</h1>
..该文件位于共享主机上,位置可观托管公司,因此在其他任何地方都不应进行有趣的交易。
在ServerFault和StackOverflow上有一些有用的链接, one more ..尽管如上所述,但是它不起作用..或我做错了,很可能是这种情况。
这与路径开始处的.
有关系吗? -它可能被视为“隐藏”? ..我没主意了:/
任何帮助都会受到赞赏和奖励,在此先感谢。
解决方法
工作解决方案 非常简单,请看一下,详细说明如下:
RewriteEngine on
RewriteCond %{REQUEST_URI} !/.anon.dir/Repo/data/native/fuse/
RewriteRule ^(.*)$ /.anon.dir/Repo/data/native/fuse/ [L,QSA]
似乎有一些内部安全检查强制实施了确保请求与目标不同的条件,另外:
- 目标路径开始/结束以斜杠
- 将
$1
附加到目标将得到 404 ,因此将使用QSA
- 如果您想一次定义路径,则很不走运,或者看起来如此
在变量中分配路径并以这种方式使用它会引起问题,如下所示:
<If "%{QUERY_STRING} =~ /(^|&)ANONFUSETEST($|&)/">
RewriteEngine on
RewriteRule ^(.*)$ - [E=TRGT:/.anon.dir/Repo/data/native/fuse/]
RewriteCond %{REQUEST_URI} !%{ENV:TRGT}
RewriteRule ^(.*)$ %{ENV:TRGT} [L,QSA]
## result is `Bad Request`
</If>
如果您知道如何使它更具“动态性”,例如:仅使用路径一次,那么您的答案将是可取的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。