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

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

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

RewriteCond %{QUERY_STRING} ^(.*)&?id=([^&]+)&?(.*)$ [NC]
RewriteRule ^/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. Спасибо за любые подсказки.

переписать регулярное выражение

1 ответ
1

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

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).

пользователь27772

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *