htaccess вопрос: удалить 1 (!) параметр из URL-запроса - PullRequest
0 голосов
/ 11 августа 2010

мой URL выглядит как

page.html? L = 0 & a = 1 & b = 2 & c = 6 ИЛИ page.html? A = 1 & b = 2 & L = 0 & c = 6 ИЛИ page.html? A = 1 & b = 2 & c= 6 & L = 0 Мне нужно удалить L = 0, где L может быть 0 или 1. Но мне нужно сохранить все остальные параметры.Как это можно сделать?

Ответы [ 3 ]

0 голосов
/ 25 августа 2010

Хорошо, я много играл на http://gskinner.com/RegExr/.

Я просто не могу найти регулярное выражение, которое работает во всех этих случаях:

domain.com / login.html? P1= 1 & p2 = 2 & L = 0 & P3 = 3 domain.com/login.html?p1=1&p2=2&L=1&P3=3 domain.com/login.html?p1=1&p2=2&L=0 domain.com/login.html?&L=00 domain.com/login.html?L=0 domain.com/login.html?L=0&p1=1&p2=2&P3=3

Последнее лучшее предположение было (. ) (L = [a-zA-Z0-9] &?) (&?) (. ) >>> $ 1 $ 3 $ 4

В результате

domain.com / login.html? p1= 1 & p2 = 2 & P3 = 3 domain.com/login.html?p1=1&p2=2&P3=3 domain.com/login.html?p1=1&p2=2& domain.com/login.html?& domain.com/login.html?domain.com/login.html?p1=1&p2=2&P3=3

То, что я пытаюсь сделать так: - Вырежьте параметр L, если он в середине - Вырежьте параметр L, если он находится в концестроки одиночного параметра - Отрежьте параметр L И "?"если это единственный параметр

Можете ли вы дать еще несколько подсказок?

0 голосов
/ 25 августа 2010

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

  • пропустил что-то
  • , может быть, это может помочь кому-то еще в подобной ситуации

.htaccess rule

# Rewrite Typo3 links with multilanguage Param "L"
RewriteCond %{QUERY_STRING} (.*)(^L=[a-zA-Z0-9]+&?|^&L=[a-zA-Z0-9]+&|&L=[a-zA-Z0-9]+)(&?.*)
RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]

Объяснение

Правило пытается охватить все следующие случаи

  • domain.com / login.html? P1 = 1 & p2 = 2 & L = abc & P3 = 3
  • domain.com / login.html? P1 = 1 & p2 = 2 & L = def
  • domain.com / login.html? & L = eh1
  • domain.com / login.html?& L = asdfasd & p1 = 1 & p2 = 2
  • domain.com / login.html? L = 0
  • domain.com / login.html? L = 1 & p1 = 1 & p2 = 2 & P3 = 3

Насколько мне известно, регулярное выражение работает следующим образом:

  1. (. *) проверяет, есть ли что-либо перед следующей опцией L-параметра
  2. Вторая группа () -pair содержит 3 варианта / случая того, как L-параметр может присутствовать в строке запроса
  3. третий (.*) просто охватывает все, что может следовать за L-параметром

Поэтомуна замену нужно только %{REQUEST_URI}?%1%3.Это исключит вторую группу () с различными параметрами L-параметра.

Конечный результат

Строка запроса URL будет удалена из L-параметра,но оставь все остальное.

Есть комментарии?Не стесняйтесь голосовать, если это также ценно для вас.

Спасибо всем, кто помог мне найти правильное решение!

0 голосов
/ 11 августа 2010

Попробуйте это правило:

RewriteCond %{QUERY_STRING} ^(([^&]*&+)*)L=[01](&+(.*))?$
RewriteRule ^page\.html$ %{REQUEST_URI}?%1%4 [L,R=301]
...