1

我一直在寻找这个,但我真的是 .htacces 的新手(我觉得它很糟糕),我无法找到解决这个问题的方法。

我的服务器中有文件夹,将默认域 URL 重定向到文件夹"web"。我有另一个文件夹,比如说subfold,在里面,我有另一个文件夹:mobile

我想要的是,如果有人键入www.adomain.com它会转到root/subfold,而不显示subfold。我是这样做的:

RewriteEngine on
Options +FollowSymLinks
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfold/ [NC]
RewriteRule (.*)$ /subfold/$1 [L]

RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/web/ [NC]
RewriteRule (.*)$ /web/$1 [L]

但是,当我访问www.adomain.com/mobile时,它​​会显示在 URL www.adomain.com/subfold/mobile/ 中

我的目标是,如果我转到移动子文件夹,在 URL 中它应该显示www.adomain.com/mobile

显然,我不想每次添加子文件夹时都编写重定向,这是可能的。

我该怎么做?

感谢您的时间和帮助!

4

1 回答 1

2

您正在被重定向,因为您访问的目录没有尾部斜杠。默认情况下,mod_dir 模块将重定向浏览器并在有人尝试访问没有尾部斜杠的目录时添加尾部斜杠。这是因为索引目录存在信息泄露问题。您可以将其关闭:

DirectorySlash Off

即使有 index.html 文件,也会有列出目录内容的风险。或者添加一堆规则以确保有一个斜杠:

RewriteEngine on
Options +FollowSymLinks
RewriteBase /

# redirect for trailing slash:
RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfold/ [NC]
RewriteCond %{DOCUMENT_ROOT}/subfold%{REQUEST_URI} -d
RewriteRule (.*[^/])$ /$1/ [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.adomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfold/ [NC]
RewriteRule (.*)$ /subfold/$1 [L]

# redirect for trailing slash
RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/web/ [NC]
RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -d
RewriteRule (.*[^/])$ /$1/ [L,R=301]

RewriteCond %{HTTP_HOST} www\.maindomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/web/ [NC]
RewriteRule (.*)$ /web/$1 [L]
于 2013-08-01T09:03:04.770 回答