我已经创建了.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]
1条答案
按热度按时间tzxcd3kk1#
(show 404)
您还可以直接将用户重定向到正确的/规范的URL。(如果您仍然想触发404,请参阅本答案末尾的附加说明。
如果在
/www
子目录中有另一个.htaccess
文件,该文件已经包含mod_rewrite指令,则在/www/.htaccess
文件的顶部添加以下内容:**UPDATE:**这里的 * 技巧 * 是使用
REDIRECT_STATUS
环境变量来检测来自客户端/浏览器的直接请求,而不是父.htaccess
文件内部重写的请求。在初始请求时,REDIRECT_STATUS
env var为 empty,但在第一次成功重写后,它被设置为字符串200
(如“200 OK”HTTP状态)。虽然上面的规则起初看起来像是重定向到它自己-它不是。由于该规则位于
/www
子目录中,因此正则表达式(.*)
仅捕获URL路径中 * 在 */www/
之后出现的URL部分。或
否则,如果你只有
.htaccess
文件在文档根目录中,那么在.htaccess
文件的现有重写之前添加以下内容:regex
^www(?:$|/(.*))
只匹配www
或www/<anything>
,并重定向回/<anything>
,删除/www/
前缀。注意:首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
返回404
但是,如果您更愿意触发404 Not Found响应,则将上面的
RewriteRule
指令更改为以下内容:其中,
<pattern>
是相应RewriteRule
指令的第一个参数(来自上述两个规则)。