Назад | Перейти на главную страницу

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

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

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

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 обратная ссылка не содержит префикса косой черты (потому что URL-путь, RewriteRule шаблон совпадений с не содержит префикса косой черты), поэтому он рассматривается как родственник подстановка пути. mod_rewrite добавляет обратно префикс каталога (т.е. /home/usrn32/domains/myserver.com/public_html/) к замена когда он является родственник.

Вам необходимо явно включить префикс косой черты в приостановление (или используйте 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 до одной точки (т.е. .) для соответствия любому символу.