.htaccess,根据子目录调整重写基数

时间:2012-05-18 18:30:37

标签: apache .htaccess

使用htaccess文件在Apache上遇到一些麻烦。 我有一个脚本需要从两个指向同一位置的不同虚拟子目录进行访问。

问题在于,当我将重写基础设置为一个位置,并尝试从另一个位置访问时,它上面有错误的变量。因为它是一个虚拟目录,所以只有一个.htaccess文件,所以我需要一种方法让我的htaccess文件知道它在访问脚本时调用的目录,这样我就可以在脚本中将重写基础设置为适当的虚拟目录。

我正在震撼我的大脑。 这是我的代码不起作用。 我尝试了一些变化,我觉得我很接近,但我很难过。

            Options -Indexes
            Options +FollowSymLinks
            ErrorDocument 404 index.php

            <IfModule mod_rewrite.c>
              RewriteEngine on

              RewriteCond %{DOCUMENT_ROOT} /$1 -f 
                RewriteBase /$1/


              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteCond %{REQUEST_URI} !=/favicon.ico
              RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
            </IfModule>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Trick是让RewriteBase使用/指向root。在$DOCUMENT_DIR下的根.htaccess中考虑这样的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

ErrorDocument 404 index.php

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

RewriteRule ^(?:vdir1|vdir2)/(.*)/?$ index.php?q=$1 [L,NC,QSA]

这里vdir1和vdir2是你的2个虚拟目录。