我有多个域指向同一台服务器。
不是让它们都指向服务器的根目录,而是让它们各自指向服务器上的自己的目录。
我使用此HTACCESS代码:
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^(www\.)?mycoolwebsite\.(com|org)$ [NC]
RewriteCond %{REQUEST_URI} !^/cooldir(/.*)?$ [NC]
RewriteRule ^(.*)$ /cooldir/$1 [QSA,L]
RewriteCond %{HTTP_HOST} ^(www\.)?mylolwebsite\.(com|org)$ [NC]
RewriteCond %{REQUEST_URI} !^/loldir(/.*)?$ [NC]
RewriteRule ^(.*)$ /loldir/$1 [QSA,L]
</IfModule>
我的服务器设置如下:
/cooldir/
/loldir/
所以,例如:
/cooldir/cookies/
/loldir/pizza/
我的问题是,有时网址会显示根目录:
我该如何解决这个问题?
注意:我无权访问VirtualHosts。这就是我使用mod_rewrite的原因。
答案 0 :(得分:1)
由于mod_dir
Apache模块在mod_rewrite
规则之后在目录前添加了一个尾部斜杠,因此发生此问题。
解决这个问题的一种方法是使用这样的代码(在顶部使用DirectorySlash Off
并稍后添加尾部斜杠):
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
DirectorySlash Off
RewriteCond %{HTTP_HOST} ^(www\.)?mycoolwebsite\.(com|org)$ [NC]
RewriteRule ^((?!cooldir/).*)$ cooldir/$1 [L,NC]
RewriteCond %{HTTP_HOST} ^(www\.)?mylolwebsite\.(com|org)$ [NC]
RewriteRule ^((?!loldir/).*)$ loldir/$1 [L,NC]
# add trailing slash in front of directories internally
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L]
</IfModule>