【发布时间】:2022-02-07 22:51:31
【问题描述】:
我想将所有无效流量重定向到我的索引页。 此上下文中的无效流量意味着:
-案例 1. 不存在的目录
-案例 2. 不存在的文件
-Case 3. 现有路由但只有目录:例如“validroute/images”或“validroute/images/”
其实我的工作代码是
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [R,L,QSA]
Options -Indexes
对于情况 1 和 2,条件和 RewriteRule 正确重定向到我的 index.php 对于第三种情况,我使用“选项 -indexes”避免用户浏览我的目录并显示禁止的错误。我想将最后一种情况也重定向到 index.php。
我基于redirect 403 error using .htaccess 得到的最接近的方法是这样的
ErrorDocument 403 /index.php
在尝试显示有效的“文件夹”(并且仅在这种情况下)时,我试图重定向到索引,而不是重定向所有禁止 (403)。
通过设置相同的重定向,我希望用户无法看到我的目录,即使他尝试手动输入不同的路线以查看目录是否存在。实际上他有提示,因为有些是“禁止的”,有些重定向到索引。
这不是这些的重复,因为给出的答案不适合我,或者问题不是我想要的:
.htaccess redirect - Options -Indexes
.htaccess option -indexes redirect?
.htaccess to redirect everything to index.php, but keep a copy of the website in a subdirectory
也许根本不可能,或者可能有另一个命令或者一个适当的正则表达式结合到 RewriteRule 来修复选择。
【问题讨论】:
-
解释一下stackoverflow.com/a/22960453/1427878 的答案对你不起作用。 (当然,您可能想要删除
R=301标志,因为此时您不想要外部重定向。通过R标志发出 403 状态代码,或者让您重写的任何脚本来执行此操作。) -
我很难看到你在这里想要达到什么目标?如果您将所有内容“重定向”到
index.php,那么您只有一个网页并且没有静态资源(因为所有内容都被重定向)? “但不要阻止导航/浏览内容” - 但是“工作”规则确实会阻止导航/浏览内容?! -
"但是如果我尝试导航到 localhost/pictures/ 它正在浏览内容" - 因为您没有对“请求匹配现有 目录”,但恰恰相反。 “但是如果我尝试使用 localhost/pictures/background.jpg,由于前 2 行,它会将我发送到索引” - 如果这不是你想要的,这应该是一个现有文件- 然后你需要修改该规则之前的检查,检查它与现有文件也不匹配,目前你只是检查它与现有目录不匹配。
-
您是否曾经想通过请求某个目录来访问该目录中的
DirectoryIndex文档?例如。/subdirectory/应该为/subdirectory/index.php提供服务,还是您总是直接请求/subdirectory/index.php?或者这不适用(即您根本没有在子目录中使用index.php等)? -
关于 403 禁止。这是由 mod_autoindex 触发的。请参阅my answer 到Webmasters stack 上的以下问题,以防止出现这种特殊的403 响应:Create a virtual index file to prevent 403s
标签: regex apache .htaccess mod-rewrite