2013-03-08 3 views
1

Я создаю приложение, и я хотел бы сопоставить субдомен 'x' с example.com/_sub/x/, но только если папка 'x' существует в папке '_sub'. Если это не так, я бы хотел, чтобы example.com отображался. Следующее работает, но только если файлы или папки также существуют внутри папки x..htaccess Субдомен в подпапке

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [L] 
</IfModule> 

Вот еще один способ взглянуть на него.

doesNotExist.example.com -> example.com 
test.example.com   -> test.example.com 
example.com    -> example.com 

Вот мой обновленный код.

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

#If the file and directory exists 
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -f 
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [P] 

#If the directory exists but the file does not 
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 !-f 
RewriteRule ^(.*)$ http://example.com/_sub/%1/404.html [P] 
</IfModule> 
+0

это может решить вашу проблему: http://stackoverflow.com/questions/6899206/how-to-check-if-a-file-exists-in-cache-using-htaccess-load- normal-script-if-no –

+0

К сожалению, для каталогов в том же домене/поддомене, и я не уверен, как настроить его для работы для меня. –

+0

ОК, возможно, это ... http://stackoverflow.com/questions/2770435/mod-rewrite-if-file-exists см. Решение Mathieu Parents –

ответ

0

Проблема, с которой я изначально сталкивался, была решена путем добавления второго набора правил для отправки каких-либо существующих файлов на локальную страницу 404. Как только я понял это, я узнал, что все работает, кроме ссылок без трейлинг-файлов. Я просто добавил оператор [OR] и следующую строку, чтобы исправить это. Надеюсь, это поможет некоторым другим в моем положении.

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

# If the file and directory exists 
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -d 
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [P] 

# If the directory exists but the file does not 
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d 
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 !-f 
RewriteRule ^(.*)$ http://example.com/_sub/%1/404.html [P] 
</IfModule> 
Смежные вопросы