与多个htaccess的斜线斜线

时间:2013-08-16 16:23:54

标签: .htaccess

我有这样的目录结构:

public_html
.htaccess[1]
  -apps     
  -.htaccess[2]
    -admin
    -myviwo

当我请求http://localhost/mysite/admin时,它会将我重定向到http://localhost/mysite/apps/admin/并向我显示管理目录的内容,如果我请求http://localhost/mysite/admin/它不会重定向我,但它会向我显示内容管理目录再次正确。但我想:

http://localhost/mysite/admin

http://localhost/mysite/admin/

以上两个网址都向我显示了管理目录的内容,但没有重定向我。

.htaccess [1]

RewriteEngine On

RewriteBase /
RewriteRule (.*) apps/$1 [L]

.htaccess [2]

RewriteEngine On

RewriteBase /
RewriteRule ^admin/?(.*)$ admin/$1 [L]
RewriteRule ^(.*)$ myviwo/$1 [L]

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

在admin目录中,添加一个htaccess文件,其中包含以下内容:

DirectorySlash Off

这使得mod_dir不会重定向目录admin的请求。但请注意,有一个important reason why directory slash is "on" by default

  

安全警告

     

关闭尾部斜杠重定向可能会导致信息泄露。考虑mod_autoindex处于活动状态(Options +Indexes)并且DirectoryIndex设置为有效资源(例如index.html)的情况,并且没有为该URL定义其他特殊处理程序。在这种情况下,带有斜杠的请求将显示index.html文件。 但是没有尾随斜杠的请求会列出目录内容

如果你没事,那就是你所需要的一切。

否则,您可能需要专门为admin添加特殊规则。在.htaccess[1]文件中,在重写基础下面添加

RewriteRule ^admin$ apps/admin/ [L]

编辑:要使上述规则动态化,您需要首先检查它是否是目录:

RewriteCond %{DOCUMENT_ROOT}/apps%{REQUEST_URI} -d
RewriteRule ^(.*[^/])$ apps/$1/ [L]