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