проблемы с mod_rewrite: отрицание - PullRequest
1 голос
/ 28 февраля 2011

Я пытаюсь понять mod_rewrite лучше, и у меня есть одна конкретная проблема, которую, я думаю, мне нужно сначала разобраться.

Я переписываю http://www.somesite.tld/a/b/c в index.php?path=a/b/c, используя следующее

RewriteRule ^(?!index.php)(.*)$ index.php?path=$1 [NC,L]

Эквивалентная перезапись в этом случае будет

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1 [NC,L]
  • Это не работает без RewriteCond - path = index.php будет результатом без специального игнорирования файлов или без указания «не index.php». Почему это?
  • Кроме того, какой синтаксис ?! и ?: я иногда вижу? Я не понимаю использование ?, когда ему ничего не предшествует.
  • И почему в первой приведенной выше RewriteRule вторая пара скобок возвращает совпадение для $ 1?

Приветствия

Ответы [ 2 ]

4 голосов
/ 28 февраля 2011

(?= ...) и (?! ...) - это специальный синтаксис в регулярных выражениях Perl и в PCRE , который является библиотекой регулярных выражений, используемой Apache. Это, соответственно, положительные и отрицательные косвенные утверждения: они соответствуют пустой строке, если текст после нее соответствует или не соответствует содержимому в скобках.

Они не захватывают, поэтому они не определяют $n (это было бы бессмысленно, поскольку они соответствуют пустой строке). (?: ...) также не захватывает, он используется для группировки подвыражений.

Ваше первое правило должно работать в .htaccess (но не в файле конфигурации виртуального хоста), хотя правильнее было бы написать его как

RewriteRule ^(?!index\.php$)(.*)$ index.php?path=$1 [L]

Возможно, другое правило взаимодействует с ним. Вы можете проверить, что именно сопоставляется и переписывается с RewriteLog и RewriteLogLevel.

0 голосов
/ 28 февраля 2011

"!"означает отрицание.Как a = 1 (a равно единице) a! = 1 (a не равно единице);«f» означает файл.Так что если вы используете вместе с "!", То вроде "! -F" будет что-то "файл не существует".ссылки ниже могут помочь вам лучше:

http://www.askapache.com/htaccess/htaccess.html http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/ http://corz.org/serv/tricks/htaccess2.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...