2010-05-05 2 views
4

У меня уже есть два правила перезаписи, которые работают правильно, но еще один код должен быть добавлен для работы отлично.mod_rewrite, если файл существует

У меня есть сайт, размещенный на mydomain.com, и все subdom.mydomain.com переписаны на mydomain.com/subs/subdom. Мой CMS должен обработать запрос, если файл был достигнут не существует, то переписывание делается так:

RewriteCond $1 !^subs/ 
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subs/%1/index.php?page=$1 [L] 

Моей CMS обрабатывает следующую часть разбора, как обычно. Проблема заключается в том, если файл существует на самом деле, мне нужно, чтобы ссылка на него, не проходя через мою CMS, мне удалось это сделать так:

RewriteCond $1 !^subs/ 
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com$ 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ subs/%1/$1 [L] 

До сих пор, кажется, работает как шарм. Теперь я придирчивый, и мне нужно иметь файлы по умолчанию, которые хранятся в subs/default /. Если файл существует в папке поддомена, мы должны его захватить, но если нет, нам нужно получить файл из субдомена по умолчанию. И если файл не существует нигде, мы должны использовать страницу 404 из текущего поддомена, если нет.

Надеюсь, он описывает достаточно хорошо. Спасибо за ваше время!

ответ

3

Проблема в том, что вам необходимо предоставить полный путь к файловой системе, чтобы получить -f и -d. Если вы находитесь в корневом каталоге документов, вы можете использовать это правило:

RewriteCond $1 !^subs/ 
RewriteCond %{DOCUMENT_ROOT}/subs/default/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/subs/default/$1 -d 
RewriteRule ^(.*)$ subs/default/$1 [L] 

Но если вы где-то еще, это будет трудно получить правильный префикс пути.

1

Благодаря Gumbo мне удалось выяснить, как это исправить. Вот что я придумал:

#GET FILE FROM THE SUBDOMAIN DIRECTORY IF IT EXISTS 
RewriteCond $1 !^subs/ 
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([^.]+)\.clan-websites\.com(.*)$ 
RewriteCond %{DOCUMENT_ROOT}/subs/%1/%2 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/subs/%1/%2 -d 
RewriteRule ^(.*)$ subs/%1%2 [L] 

#GET THE DEFAULT FILE IF NOT FOUND IN SUBDOMAIN 
RewriteCond $1 !^subs/ 
RewriteCond %{REQUEST_URI} ^(.*)$ 
RewriteCond %{DOCUMENT_ROOT}/subs/factory/%1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/subs/factory/%1 -d 
RewriteRule ^(.*)$ subs/factory%1 [L] 

#SEND THE DATA TO THE SUBDOMAIN CMSMS SINCE NO FILE EXISTS 
RewriteCond $1 !^subs/ 
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([^.]+)\.clan-websites\.com(.*)$ 
RewriteCond %{DOCUMENT_ROOT}/subs/%1/%2 !-f [OR] 
RewriteCond %{DOCUMENT_ROOT}/subs/%1/%2 !-d 
RewriteRule ^(.*)$ subs/%1/index.php?page=$1 [L] 
Смежные вопросы