.htaccess 如何通过htaccess重定向文档根目录并阻止对新文档根目录的直接访问

ut6juiuv  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(153)

我已经创建了.htaccess规则,工作得很好,它们将用户重定向到新的文档根目录,但我仍然可以通过简单地在地址栏中键入新文档根目录的名称来访问网站的内容,这是不希望的
example.com-显示www的内容
但是
example.com/wwwexample.com/www/-工作也很好,这是我想改变的东西(改为显示404)

Options -Indexes
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/www
RewriteRule ^(.*)$ /www/$1 [L,NC]
tzxcd3kk

tzxcd3kk1#

(show 404)
您还可以直接将用户重定向到正确的/规范的URL。(如果您仍然想触发404,请参阅本答案末尾的附加说明。
如果在/www子目录中有另一个.htaccess文件,该文件已经包含mod_rewrite指令,则在/www/.htaccess文件的顶部添加以下内容:

# /www/.htaccess    

# Redirect direct requests back to the root
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /$1 [R=301,L]

**UPDATE:**这里的 * 技巧 * 是使用REDIRECT_STATUS环境变量来检测来自客户端/浏览器的直接请求,而不是父.htaccess文件内部重写的请求。在初始请求时,REDIRECT_STATUS env var为 empty,但在第一次成功重写后,它被设置为字符串200(如“200 OK”HTTP状态)。

虽然上面的规则起初看起来像是重定向到它自己-它不是。由于该规则位于/www子目录中,因此正则表达式(.*)仅捕获URL路径中 * 在 * /www/之后出现的URL部分。

否则,如果你只有.htaccess文件在文档根目录中,那么在.htaccess文件的现有重写之前添加以下内容:

# /.htaccess    

# Redirect direct requests to the "/www" directory back to the root
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^www(?:$|/(.*)) /$1 [R=301,L]

regex ^www(?:$|/(.*))只匹配wwwwww/<anything>,并重定向回/<anything>,删除/www/前缀。
注意:首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

返回404

但是,如果您更愿意触发404 Not Found响应,则将上面的RewriteRule指令更改为以下内容:

:
RewriteRule <pattern> - [R=404]

其中,<pattern>是相应RewriteRule指令的第一个参数(来自上述两个规则)。

相关问题