Htaccess + regex - сервер возвращает 500 Внутренняя ошибка сервера - PullRequest
0 голосов
/ 20 января 2019

У меня есть следующее регулярное выражение:

^(?:([a-z]{2})\/)?.*?(?:\/?([\w\-]+))$

, что в основном означает, что я хочу получить двухбуквенный код языка и последнюю строку после косой черты.

Используется ответ отдругой вопрос.Я не мог вернуть совпадения в обратном порядке, поэтому установил последний.

К сожалению, мой сервер возвращает 500 Внутренняя ошибка сервера .Я проверил это, и похоже, что ему не нравится звезда * в середине регулярного выражения.

Также не нравится .+, если я вставлю его вместо .*

Ниже приведены примеры URL:

page
page/page1
page/page2/page3

en
en/page
en/page/page2
en/page/page2/page3

Я бы хотел, чтобы совпадения были:

page
page1
page3

en
en & page
en & page2
en & page3

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

Ссылка на Regex101: https://regex101.com/r/hW9eZ4/10

1 Ответ

0 голосов
/ 20 января 2019

Вы можете использовать правило с регулярным выражением, которое использует групповую функцию сброса ветвей PCRE :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?|([a-z]{2})|(?:([a-z]{2})/)?.*?([\w-]+))/?$ index.php?a=$1&b=$2 [L,QSA]

RegEx Demo

Я проверил на своем Apache, и он работает довольно хорошо. Обязательно прокомментируйте все остальные правила при тестировании.

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