Необязательное регулярное выражение для перезаписи URL: как сделать часть URL полностью необязательной? - PullRequest
1 голос
/ 08 марта 2011

краткий вопрос о необязательном регулярном выражении :

представьте себе данную страницу, которая в настоящее время переписана / украшена:

/xx/somepage/description-description-description

во время загрузки уродливого URL под водой:

/somepage?ln=xx

с помощью этого, казалось бы, рабочего правила:

RewriteRule ^([a-z][a-z])/(.*)/(.*?)$ /$2?ln=$1 [L]

Однако в настоящее время последняя часть /description теперь является обязательной. Без этого ошибка 404 происходит. Какой RewriteRule я должен использовать, чтобы сделать третью и последнюю часть необязательной? Тем более что он не имеет значения для извлечения файлов и предназначен только для того, чтобы сделать URL более понятным.

Другими словами, я бы хотел, чтобы все три из приведенных ниже работали одинаково:

/xx/somepage
/xx/somepage/description-description-description

большое спасибо

обновление

оба они работают нормально:

RewriteRule ^([a-z][a-z])/(.*?)(/.*)?$   /$2?ln=$1 [L]
RewriteRule ^([a-z][a-z])/([^/]+)(/.*)?$ /$2?ln=$1 [L]

разница в средней части. Я полагаю, что это как-то связано с жадностью ... но почему / чем они точно отличаются ... кто-то другой мог бы пролить здесь свет.

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Удалите последний / в своем правиле или поместите его в необязательную группу. Как я понимаю, и из того, что я вижу, описание не полностью необходимо, но завершающий слеш есть.

Новый RegEx:

RewriteRule ^([a-z][a-z])/(.*?)(/.*)?$ /$2?ln=$1 [L]
1 голос
/ 08 марта 2011

Возможно, вам нужно убедиться, что второй шаблон не содержит косую черту:

RewriteRule ^([a-z][a-z])/([^/]+)(/.*)?$ /$2?ln=$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...