Apache - RewriteCond / RewriteRule для URL в HTTPS и с указанным параметром c - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужно добавить параметр к URL-адресу, если к URL-адресу обращаются в https и только если параметр не существует (мне не нужно проверять значение параметра).

  1. Пример 1: ничего не следует делать, поскольку URL-адрес доступен в http

    Исходный URL: http://example.com Конечный URL: http://example.com

  2. Пример 2: Apache необходимо перенаправить на https://example.com?parameterName=parameterValue

    Оригинал URL: https://example.com
    Окончательный URL: https://example.com?parameterName=parameterValue

  3. Пример 3. Ничего не следует делать, поскольку URL-адрес находится в https и содержит параметр «имя_параметра» (этот параметр предотвращает бесконечность l oop)

    Исходный URL: https://example.com?parameterName=parameterValue Конечный URL: https://example.com?parameterName=parameterValue

То, что я пробовал до сих пор:

RewriteEngine On

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^parameterName$ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}%parameterName=parameterValue

Редактировать 1: если я удалю "RewriteCond % {HTTPS} on "условие, кажется, правило выполняется. Параметры не добавляются правильно, но, по крайней мере, выполняется правило.

Теперь мне нужно понять, почему правило не выполняется, когда в HTTPS.

Погуглив немного, я нашел несколько сообщения о том, что AllowOverride необходимо изменить на AllowOverride All.

Я обновил строку ниже в моем файле httpd-conf, но поведение не изменилось:

От: AllowOverride Нет Чтобы разрешить переопределение Все

1 Ответ

0 голосов
/ 09 апреля 2020

Код ниже сделал то, что мне нужно:

RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} !.*parameterName.*
RewriteRule /myapplicationpath?(.*) /myapplicationpath?parameterName=parameterValue&%{QUERY_STRING} [R]
...