У меня есть строка mod_rewrite, которая работает под Apache 2.2, но не под Apache 1.3:
RewriteRule ^(?!index.php)(?!skin/)(?!js/)(.+) /index.php?file=$1 [NC,L]
Если я потеряю компоненты отрицательного прогноза между скобками, я потеряю код состояния 500. GoDaddy не будет обновлять httpd для этого клиентского пакета (вздох), так что есть ли у кого-нибудь решение, которое могло бы работать в 1.3 (и не слишком грязный: P)? Или, что еще лучше, может кто-нибудь объяснить, что здесь может происходить? Мне по-прежнему интересно только потому, что я не могу найти никакой информации о движке регулярных выражений Perl, используемом в 1.3, не поддерживающем отрицательный прогноз ...
Apache 1.3 не использует Perl-совместимые обычные экспрессоины (PCRE), он использует регулярные выражения POSIX. Регулярные выражения POSIX не поддерживают отрицательный просмотр вперед. Поддержка PCRE - это Новая функция начиная с Apache 2.
Что касается того, как заставить это работать, вам, вероятно, потребуется использовать некоторый RewriteCond, чтобы правило НЕ запускалось, если оно соответствует одному из этих трех ... например. возможно:
RewriteCond %{REQUEST_URI} !index.php.*
RewriteCond %{REQUEST_URI} !skin/.*
RewriteCond %{REQUEST_URI} !js/.*
RewriteRule ^(?!index.php)(?!skin/)(?!js/)(.+) /index.php?file=$1 [NC,L]
Конечно, я это не тестировал ... У меня больше нет Apache 1.3.
Адам Беллер прав. Apache изменил механизм регулярных выражений в версии 1.2 и версии 2.0.
Для Apache 1.1.x они использовали «Система V8»И начиная с Apache 1.2 и более поздних версий POSIX ERE. Последнее изменение было с Apache 2.0, когда они перешли на PCRE. Вы можете взглянуть на Сравнение вкусов регулярных выражений чтобы увидеть различия.
Теперь вот решение, как вы можете решить эту проблему без предварительных утверждений, которые доступны только в PCRE:
RewriteCond $1 !^(index\.php|skin/|js/)
RewriteRule ^(.+) /index.php?file=$1 [NC,L]
Здесь дополнительные RewriteCond
заключается в проверке того, что соответствующая строка первого подшаблона действительно начинается с перечисленных параметров.