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