Рейтинг:0

Можно ли получить доступ к измененной строке запроса в RewriteCond *после* применения RewriteRule?

флаг cn

Можно ли получить доступ к измененной строке запроса в RewriteCond после применить RewriteRule?

Я пытаюсь применить...

RewriteCond %{QUERY_STRING} ^(.*)&?id=([^&]+)&?(.*)$ [NC]
Правило перезаписи ^/app\.jsp$ /app/%2?%1%3 [R=302]

... чтобы переписать следующие URL-адреса в "хорошие". Это уже работает, но для (2) и (3) все еще есть ненужные завершающие "?" и символы "%", которые я хотел бы удалить:

/app.jsp?id=123&b=1 -> /app/123?b=1 (1)
/app.jsp?id=123 -> /app/123? (2)
/app.jsp?b=1&id=123 -> /app/123?b=1& (3)

Моя идея состоит в том, чтобы добавить дополнительные условные RewriteRule, чтобы удалить завершающий "?" и символы "%" из модифицированный строка запроса, но я не знаю, как получить доступ к последнему в последующих RewriteCond. Спасибо за любые подсказки.

Рейтинг:0
флаг cn

Хорошо, я сам нашел простое решение:

RewriteCond %{QUERY_STRING} ^()id=([^&]+)(.*)$ [NC,OR]
RewriteCond \?%{QUERY_STRING} ^(\?.*)&id=([^&]+)(.*)$ [NC]
RewriteRule ^/app\.jsp$ /app/%2%1%3 [R=302,QSD,L]

Перепишите результаты:

/app.jsp?id=123&b=1 -> /app/123?b=1 (1)
/app.jsp?id=123 -> /app/123 (2)
/app.jsp?b=1&id=123 -> /app/123?b=1 (3)
/app.jsp?b=1&id=123&d=2 -> /app/123?b=1&d=2 (4)

Некоторые замечания:

  • успешно протестирован с клапаном перезаписи Apache Tomcat (см. https://tomcat.apache.org/tomcat-9.0-doc/rewrite.html) для таких URL, как https://example.com/my_webapp/app.jsp
  • должен работать и с Apache httpd, возможно, с ^app вместо ^/app в Правило перезаписи
  • некоторым тестировщикам .htaccess нравится https://htaccess.madewithlove.com/ похоже, не принимают TestStrings, например ?%{СТРОКА ЗАПРОСА}. Поэтому такие случаи следует тестировать непосредственно с помощью Tomcat (или httpd).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.