Соответствует только первому и второму блоку URL - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь сделать регулярное выражение, чтобы сопоставить только вторую часть URL, а оставшуюся часть оставить

Например

https://example.com/first-part/second-part/third-part/?prop=2

результат = https://example.com/alt/second-part/

Как я могу это сделать?

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

Я могу go простой способ, подобный этому:

RewriteRule ^(.*)first-part\/(.+)\/(.*)\/(.*)$ https://example.com/alt/$2 [R=301,L]

Проблема в том, что если URL-адрес такой:

https://example.com/first-part/second-part/

Результат ожидается. https://example.com/alt/second-part/ Это даже не будет соответствовать

Поэтому я ищу более универсальную c альтернативу, которая может соответствовать нескольким сценариям ios, дающим одинаковый результат в конечном итоге в тот же формат:

https://example.com/alt/second-part/

Просто зная, как точно первая часть точно, и не зная, как что-либо, кроме второй части будет отформатирован.

1 Ответ

0 голосов
/ 18 февраля 2020

Принимая во внимание рекомендации @Eraklon, чтобы избежать жадных проверок, я нашел решение:

RewriteRule ^first-part\/([^\/]+(\/)?)(.*) https://example.com/alt/$1 [R=301,L]

Можно проверить здесь: https://htaccess.madewithlove.be?share=8973fe68-f137-59a5-b27b-0cbbe3d842bc

Точно соответствует первой части с ^ first-part /, а затем входит в группу:

([^\/]+(\/)?)

, которая проверяет 1 или более символов, которые не являются sla sh /. Когда он находит первый параметр sh, это может быть следующий раздел URL или конец URL.

Не уверен, что это лучше, но идея в том, что он соответствует всего 1 шаблону за 1 доллар, который включает в себя оба конца: sla sh и not-sla sh для второго блока URL-адреса .

Мне не удалось удалить последний бит из URL-адреса (параметры? Parameter = a)

Таким образом, результат с этой формой URL, например:

https://example.com/first-part/second-part/third-part/?parameter=a

Будет

https://example.com/alt/second-part/?parameter=a

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

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