Apache Mod Rewrite: RewriteRule с аргументом L. Что не так?

Я разрабатываю php-приложение, и у меня есть небольшая проблема с Apache и Mod Rewrite. Кто-нибудь знает, что здесь не так?

RewriteEngine on RewriteBase /mysite/ RewriteRule ^css\/css\.css css/css.php [L] RewriteRule ^js\/js\.js js/js.php [L] RewriteRule !^img\/.* index.php 

Когда я помещаю http: //localhost/css/css.css, появляется index.php, возможно, я что-то пропустил … Почему, когда URL-адрес совпадает с первым правилом, apache не останавливает процесс перезаписи?

'last | L' (последнее правило)

Остановите процесс перезаписи здесь и не применяйте больше правил перезаписи. Это соответствует последней команде Perl или команде break на языке C. Используйте этот флаг, чтобы предотвратить переписывание в настоящее время переписанного URL, следуя правилам. Например, используйте его, чтобы переписать URL корневого пути ('/') на реальный, например '/ e / www /'.

Я читал форумы и документы с 3 часов, и у меня по-прежнему такая же проблема.

Заранее спасибо.

Solutions Collecting From Web of "Apache Mod Rewrite: RewriteRule с аргументом L. Что не так?"

Centauro12, проблема в том, что флаг [L] фактически прекращает распространение через следующие правила, но затем (если вы находитесь в файле .htaccess), сопоставление URL начинается снова . Это означает, что все ваши правила будут обработаны во второй раз. Подробнее см. Руководство по перезаписи Apache .

Поэтому вам нужно явно отключить переписывание для перезаписанных скриптов php:

 RewriteRule ^css/css.php - [L] RewriteRule ^js/js.php - [L] 

или более компактный (хотя, возможно, не тот, который вам нужен):

 # don't rewrite anything that really exists RewriteCond %{REQUEST_FILENAME} -f RewriteRule .* - [L] 

Я нашел решение:

 RewriteEngine on RewriteBase /mysite/ RewriteRule ^css\/css\.css css/css.php [L] RewriteRule ^css\/(.*)$ css/$1 [L] RewriteRule ^js\/js\.js js/js.php [L] RewriteRule ^js\/(.*)$ js/$1 [L] RewriteRule ^img/(.*)$ img/$1 [L] RewriteRule ^(.*)$ index.php?rewrite=$1 

Он отлично работает, но я не знаю, почему это необходимо

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

а также

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

Надеюсь, что это все.

Благодаря! 🙂

пытаться

 RewriteRule ^/css/css\.css css/css.php [L] RewriteRule ^/js/js\.js js/js.php [L] RewriteRule ! /^img/.* index.php 

то есть. если вы выбрали шаблон в начале строки, запустите его с помощью / . шаблоны сопоставляются с URL-путями , которые начинаются с / .

РЕДАКТИРОВАТЬ

выше действителен только для конфигурации сервера, виртуального хоста и контекста каталога. если контекст является .htaccess, префикс для каждого каталога, включающий первую косую черту, удаляется до того, как правило будет согласовано (и добавлено потом), поэтому нет необходимости в ^/ здесь.

Возможно, вам придется установить свою базу перезаписи на «/» перед началом выражения с помощью «^ css …»

 RewriteBase /