Перенаправление Apache - удалить все запросы

Я пытаюсь удалить все запросы в URL:

  • https://api.myserver.com/image.png?arg=0 должен стать
  • https: // api. myserver.com/image.png

Я использовал это:

RewriteCond      %{QUERY_STRING}    ^arg=0$
RewriteRule      (.*)               $1?     [R=permanent]

И вот результат:

https://api.myserver.com/home/usrn32/domains/myserver.com/public_html/image. png

Итак, параметры удаляются, но путь является абсолютным, а не относительным. Кроме того, я хочу поймать все номера arg , а не только 0 .

Как?

1
задан 25 May 2018 в 16:38
1 ответ

Похоже, это находится в контексте каталога . В этом случае обратная ссылка $ 1 не содержит префикса косой черты (поскольку URL-путь, с которым совпадает шаблон RewriteRule , не содержит префикса косой черты), поэтому рассматривается как подстановка относительного пути. mod_rewrite добавляет обратно префикс каталога (например, /home/usrn32/domains/myserver.com/public_html/ ) к подстановке , если он является относительным .

Вам необходимо явно включить префикс косой черты в Susbtitution (или использовать директиву RewriteBase ), чтобы он больше не был относительным . Например:

RewriteRule      (.*)               /$1?     [R=permanent,L]

Кроме того, вы, вероятно, захотите включить флаг L , чтобы предотвратить дальнейшие перезаписи (если они у вас есть).

Кроме того, я хочу перехватывать все числа аргументов, а не только 0 .

Измените свой CondPattern ( ^ arg = 0 $ ) на что-то вроде ^ arg = \ d + $ (1 или более цифр).

Вкратце:

RewriteCond      %{QUERY_STRING}    ^arg=\d+$
RewriteRule      (.*)               /$1?     [R=permanent,L]

удалить все запросы

Если вы буквально хотите удалить все параметры строки запроса, то вы можете изменить CondPattern только на одну точку (т.е. . ) для соответствия любому символу.

1
ответ дан 3 December 2019 в 23:15

Теги

Похожие вопросы