2015-03-26 5 views
1

Начну с отображения вашего кода, а затем я объясню, чего я пытаюсь достичь.Mod_rewrite перенаправить к определенному файлу

RewriteEngine On 

RewriteRule ^core$ library/core.php [L] 

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

RewriteRule ^$ public/ [L] 

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

Я использую core.php в качестве файла процессора для нескольких запросов, отправленных ajax. Когда я сделаю запрос, это будет что-то вроде «http://mysite/core», и я хочу, чтобы он делал через файл .htaccess и непосредственно на «http://mysite/library/core.php». Я тестировал его, и он работает нормально до этой строки (я думаю, это было бы странно не для). Однако, если запрос не «http://mysite/core», я хочу, чтобы проверить, если этот запрос не является ни существующий файл, ни папка, и если это не какой-либо из тех, я хочу:

Если удалить последний RewriteRule, все работает отлично. Однако, если я позволю этому, (даже если я получаю доступ к «http://mysite/core»), он перенаправляет меня на «http://mysite/public/library/core.php». Я не могу понять, что происходит. Это похоже на то, что он не знает мой флаг [L] в первом RewriteRule.

Любая помощь будет высоко оценена. Заранее спасибо.

ответ

1

Имейте это так:

RewriteEngine On 

RewriteRule ^core$ library/core.php [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ public/$1 [L] 

RewriteCond применима только для очень следующего RewriteRule.

+0

Да, это работает так. Спасибо. Во всяком случае, почему (в моем примере), что [L] попал в первый RewriteRule, не был применен? Что бы ни случилось после этого ... разве это не следует игнорировать? –

+0

На самом деле 'L' не останавливает выполнение других правил, он просто заканчивает текущее правило. – anubhava

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