Проблема квалификатора .htaccess - PullRequest
1 голос
/ 14 мая 2011

Кто-нибудь знает, в чем проблема с этим правилом перезаписи?

RewriteRule ^example/?(.*)/?(.*)/?(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]

Разве это не должно работать, обнаруживая ? как условие?

Редактировать ОК, позвольте мне перефразировать мой вопрос.

Как заставить Apache игнорировать $1 - $3, если он пуст, и просто перейти к example.php?

Например, вместо 3 строк:

RewriteRule ^example/(.*)/(.*)/(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]
RewriteRule ^example/(.*)/(.*)$ example.php?id=$1&ud=$2 [QSA,L]
RewriteRule ^example/(.*)$ example.php?id=$1 [QSA,L]

Мне нужна одна строка, чтобы решить все 3 или более.

Ответы [ 3 ]

1 голос
/ 14 мая 2011

Ошибка 404 может быть вызвана отсутствием RewriteEngine.Чтобы решить проблему с параметрами, используйте:

RewriteEngine on
RewriteRule ^example/?([^/]+)?/?([^/]+)?/?([^/]+)?/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]
1 голос
/ 14 мая 2011

Разве это не должно работать при обнаружении?как условно?

Конечно, но обратные ссылки по-прежнему заполнены по порядку.Если первые скобки (.*) соответствуют пустой строке, то $1 пусто;нет никакого способа сделать этот захват "пропущенным".

1 голос
/ 14 мая 2011

Из соображений жадности ваше правило эквивалентно следующему:

RewriteRule ^example/?(.*)$ example.php?id=$1 [QSA,L]

Вы, вероятно, хотите это вместо:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]

Основываясь на недавнем редактировании вашего вопроса, я бы использовал несколько правил:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]
RewriteRule ^example/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2 [QSA,L]
RewriteRule ^example/([^/]+)/?$ example.php?id=$1 [QSA,L]
...