Htaccess的问题

时间:2014-10-16 17:06:27

标签: apache .htaccess mod-rewrite

我有多个域指向同一台服务器。

不是让它们都指向服务器的根目录,而是让它们各自指向服务器上的自己的目录。

我使用此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>

我的服务器设置如下:

所以,例如:

我的问题是,有时网址会显示根目录:

我该如何解决这个问题?

注意:我无权访问VirtualHosts。这就是我使用mod_rewrite的原因。

1 个答案:

答案 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>