2009-03-27 2 views
3

У меня есть 2 поддомены, которые используют одни и те же правила, как показано ниже:Те же правила для нескольких каталогов в Apache?

<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, потому что когда у меня будет больше каталогов, регулярное выражение будет расти недостижимым.

ответ

7

поставить правила перезаписи в отдельный файл, например. rewrite.conf и include это нравится так

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

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

Спасибо, это то, что я искал! –

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

Это кажется довольно чистым мне ...