Почему это регулярное выражение htaccess терпит неудачу с 3 или более периодами? - PullRequest
0 голосов
/ 20 мая 2018

Почему этот RegEx терпит неудачу?

Цель состоит в том, чтобы переписать:

http://example.com/Almost-Anything-Here/381 -> /lv.php?id=381&%{QUERY_STRING}

Обратите внимание, чтоЯ игнорирую текст в URL и просто пытаюсь получить номер (в данном примере, 381), который я передаю lv.php.

Вот правило:

RewriteRule ^[/]?[A-Za-z0-9\-_(\.)*]+/([0-9]+)$ /lv.php?id=$1&%{QUERY_STRING} [L]

Работает, если есть 0, 1 или 2 периода, но не работает (с HTTP 500) в течение 3 или более периодов.Зачем?!Я попробовал несколько способов избежать / захватить период в регулярном выражении, но безуспешно.

Пример тестовых URL:

ОБНОВЛЕНИЕ Вот сообщение об ошибке сжурнал сервера, явно проблема с регулярным выражением, все еще не уверен, почему ...

Access denied with code 500. Pattern match "\\\\.\\\\.\\\\./" at REQUEST_URI. [msg "Bogus Path denied"] [hostname "www.example.com"] [uri "/Great.../381"]

1 Ответ

0 голосов
/ 21 мая 2018

Я почти уверен, что на вашем веб-сервере Apache установлено ModSecurity и содержится такая конфигурация безопасности:

#generic bogus path sigs
SecRule REQUEST_URI "\.\.\./" "id:300006,rev:1,severity:2,msg:'Bogus Path denied'"

Существует несколько способов его отключения , но обычно mod_security реализуется не без причины.

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