Apache中多个目录的规则相同?

时间:2009-03-27 00:43:58

标签: apache mod-rewrite url-rewriting

我有2个子域使用相同的规则,如下所示:

<Directory /srv/project/sites/project.hu/htdocs/>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ index.php?route=$1 [L,QSA]
    SetEnv config default,local
    Order allow,deny
    allow from 192.168.0.0/16
</Directory>

<Directory /srv/project/sites/admin.project.hu/htdocs/>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ index.php?route=$1 [L,QSA]
    SetEnv config default,local
    Order allow,deny
    allow from 192.168.0.0/16
</Directory>

正如您所看到的,两个容器中的规则是相同的。 如何在单个容器中指定这些规则? 起初我想过用这个:

<DirectoryMatch ^/srv/project/sites/(?:(?:admin\.project\.hu)|project\.hu)/htdocs/$>
 ...
</DirectoryMatch>

但是,有没有办法以更清洁的方式做到这一点,我错过了?

编辑: 我不喜欢DirectoryMatch方式,因为当我有更多目录时,正则表达式将变得无法维护。

2 个答案:

答案 0 :(得分:8)

将重写规则放入单独的文件中,例如。 rewrite.confinclude就像这样

<Directory /srv/project/sites/project.hu/htdocs/>
  Include rewrite.conf
</Directory>

<Directory /srv/project/sites/admin.project.hu/htdocs/>
  Include rewrite.conf
</Directory>

答案 1 :(得分:1)

<DirectoryMatch ^/srv/project/sites/(?:admin\.)?project\.hu/htdocs/$>

这对我来说似乎相当干净......