如何确保子目录名称永远不会出现在URL中?

时间:2016-11-02 00:07:24

标签: apache .htaccess

我想通过将我的主要网站内容移动到自己的子文件夹中来使我的基本目录更整洁。但是,我不希望曾经的子文件夹名称出现在URL中(理想情况下)。似乎没有任何改变。我已经在StackOverflow上浏览了其他类似的问题,但他们还没有解决我的问题(见下文)。

到目前为止,我的.htaccess文件中有以下代码:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /sub/$1 
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ 
RewriteRule ^(/)?$ sub/index.html [L]

有了这个,如果我导航到domain.com/,我会按预期看到sub的内容,而网址中没有任何其他内容。到目前为止一切都很好。

问题

当我尝试导航到domain.com/folder 之类的网址而没有结尾斜杠时,会出现问题。最终的网址最终为domain.com/sub/folder。我不希望sub在那里,任何地方,永远。我应该在.htaccess文件中添加什么内容,以便sub在每种情况下都保持隐藏状态?

如果我添加domain.com/folder/之类的尾部斜杠,则sub会根据需要保持隐藏状态。只有没有尾随斜线才会出现问题。

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/?$ /sub/$1 [L] 
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ 
RewriteRule ^/?$ sub/index.html [L]