我有这样的目录结构:
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]
我怎样才能做到这一点?
答案 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]