2011-06-17 5 views
1

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

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ /index.php/$1 [L] 

Теперь я хочу, чтобы добавить исключение, когда домен содержит некоторые строки, но я не знаю, как добавить это. Я думал добавить следующее.

RewriteCond %{HTTP_HOST} ^(aanmelding|keyclamps|probouw) 
RewriteRule ^(.*)$ /project.php/$1 [L] 

UPDATE, я нашел частичное решение Если бы это так:

RewriteEngine on 
# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# If not an old project 
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw) 

# forward it to index.php 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# forward it to project.php 
RewriteRule ^(.*)$ /project.php/$1 [L] 

Он работает, но с ошибкой. Поскольку index.php существует, вторая часть условного значения по-прежнему относится к index.php вместо project.php, когда называется простой домен, как http://probouw.localhost/

Любые идеи?

+0

ли «не работает» означает, что вы всегда перенаправляются 'index.php'? –

+0

О нет, я получаю ошибку сервера, поэтому начать с нее некорректно. Отдельно они не вызывают ошибки. – Edward

+0

Ошибки Apache обычно регистрируются. У вас есть доступ к журналам? –

ответ

3

Для тех, кто что может понадобиться это, решение было:

RewriteEngine on 
# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# If not an old project 
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw) 

# forward it to index.php 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d [OR] 
RewriteCond %{REQUEST_URI} =/ 

# forward it to project.php 
RewriteRule ^(.*)$ /project.php/$1 [L] 
+0

+1 Nice. Я давно не понял этого. Рад, что тебе удалось. – Tomgrohl

0

Возможно, использование ИЛИ поможет (NC = NotCase чувствительна кстати)?

RewriteCond %{HTTP_HOST} ^.*aanmelding.*$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^.*keyclamps.*$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^.*probouw.*$ [NC] 
+0

Это решение также работает (извините за мое описание, «contains» должно быть «начинается с», но я получаю ваш код). Тем не менее, там есть ошибка (см. Мое обновление). Как мне заставить его перейти к project.php, когда index.php также существует? – Edward

+0

Хорошо, извините, слишком мало времени прямо сейчас. Возможно, вы можете избежать этого, переименовав index.php в нечто вроде default.php? – Bing

+0

Нет, проблема. Благодаря! Я не могу переименовать index.php Поэтому я использовал свой код, чтобы попробовать этот RewriteCond% {REQUEST_FILENAME}! -d [OR] RewriteCond% {REQUEST_FILENAME} ^/$ Но это было не так как – Edward

0

Что касается вашего частичного решения, если вы меняете последнюю часть, это работает?

# forward it to project.php 
RewriteRule ^/?$ /project.php [L] 
RewriteRule ^(.*?)$ /project.php/$1 [L] 
+0

Thx! Но это не сработало. Мне кажется, что проблема заключается в том, что «/» является недействительным условием, поскольку root существует и RewriteRules даже не исключены. – Edward

+0

Знаете ли вы, как сделать RewriteRule также excecute, когда REQUEST_FILENAME «/». Я пробовал% {REQUEST_FILENAME}! -d [OR] RewriteCond% {REQUEST_FILENAME} ^/$ Но это не сработало. – Edward

+0

Я проверю это. Смотрите, почему это не работает. – Tomgrohl

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