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

问题描述 投票:0回答:1

我已经创建了

.htaccess
规则,它们工作得很好,它们将用户重定向到新的文档根目录,但我仍然可以通过在地址栏中简单地输入新文档根目录的名称来访问网站的内容,这是不想要的东西

example.com
- 显示 www

的内容

但是

example.com/www
example.com/www/
- 也可以工作,这是我想改变的(改为显示 404)

Options -Indexes
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/www
RewriteRule ^(.*)$ /www/$1 [L,NC]
apache .htaccess
1个回答
0
投票

(改为显示 404)

您也可以将用户重定向到正确/规范的 URL。 (如果您仍然想触发 404,请参阅此答案末尾的附加说明。)

如果您在

.htaccess
子目录中有另一个
/www
文件,该文件已经包含 mod_rewrite 指令,则在
/www/.htaccess
文件的顶部添加以下内容:

# /www/.htaccess    

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

虽然上面的规则乍一看似乎是重定向到自身,但实际上并没有。由于规则位于

/www
子目录中,因此正则表达式
(.*)
仅捕获 URL 路径中after
/www/
出现的 URL 部分。

否则,如果您在文档根目录中只有

.htaccess
文件,则在根.htaccess文件中添加以下
before
现有重写:

# /.htaccess    

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

正则表达式

^www(?:$|/(.*))
仅匹配
www
www/<anything>
并重定向回
/<anything>
,删除
/www/
前缀。

注意:首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。


改为返回 404

但是,如果您更愿意触发 404 Not Found 响应,则将上面的

RewriteRule
指令更改为以下内容:

:
RewriteRule <pattern> - [R=404]

其中

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

© www.soinside.com 2019 - 2024. All rights reserved.