我一直都在寻找这个但是我真的是新手.htacces(我发现它是地狱)我无法解决这个问题。
我的服务器中有 root 文件夹,将默认域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 时,会显示在网址 www.adomain.com/subfold/mobile /
我的目标是,如果我转到移动子文件夹,请在网址中显示 www.adomain.com/mobile
显然,我希望每次添加子文件夹时都不必编写重定向,这是可能的。
我该怎么做?
感谢您的时间和帮助!
答案 0 :(得分: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]