2010-07-27 3 views
0

У меня есть следующая логика перезаписи, и она работает, чтобы частично перенаправить субдомен. Если я нахожу URL-адрес http://subdomain.clientcollabhq.com/some/path, он перенаправляет правильно, но если я нахожусь http://subdomain.clientcollabhq.com/, он пропускает блоки RewriteCond для субдомена и попадает в резервный RewriteRule. Любая идея, что происходит?Subdomain Rewrite Logic

# 
# ClientCollabHQ 
# 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName clientcollabhq.com 
    ServerAlias *.clientcollabhq.com 

    DirectoryIndex index.php 
    DocumentRoot "D:/wamp/www/dropbox/My Dropbox/ClientCollabHQ/www/html" 
    ErrorLog "D:/wamp/www/dropbox/My Dropbox/ClientCollabHQ/www/logs/error.log" 

    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf)$ [OR] 
    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d [OR] 
    RewriteCond %{REQUEST_FILENAME} -l 
    RewriteRule^- [L] 

    RewriteCond %{HTTP_HOST} !^www\.clientcollabhq\.com$ [NC] 
    RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.clientcollabhq\.com$ [NC] 
    RewriteRule ^(.*)$ /index.php?subdomain=%2&kohana_uri=$1 [PT,L,QSA] 

    RewriteRule ^(.*)$ /index.php?kohana_uri=$1 [PT,L,QSA] 
</VirtualHost> 

С уважением,
Эндрю

ответ

1

Я не уверен, какой раздел вы имели в виду «запасной вариант», но для URL http://subdomain.clientcollabhq.com/, один из следующих условий будет верно (я абсолютно уверен, это -d, потому что DirectoryIndex не должны были применяться еще я думаю):

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 

причина этого заключается в том, что ваши точки поддоменов в корневом каталоге сайта, который бывает реальный ресурс. Поскольку условия верны, переписывание не выполняется, и вы должны закончиться на index.php без аргументов. Вы можете обойти это, добавив еще одно условие к первому набору, чтобы убедиться, что запрашивается что-то, кроме корня, до короткого замыкания последних правил.

Например:

RewriteCond %{REQUEST_URI} ^/.+$ 
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf)$ [OR] 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L] 
+0

Работает точно так, как он теперь должен. Благодаря! –

Смежные вопросы