Подтвердить что ты не робот

Mod_rewrite: удалить строку запроса из URL?

Я пытаюсь сделать следующее перенаправление (301), используя .htaccess

*? page = 1 перенаправляет на *

(где * - подстановочный знак).

В принципе, я просто хочу, чтобы кто-либо не обращался к странице с? page = 1 в конце URL-адреса и вместо этого направлял их на тот же URL-адрес минус ?page=1.

Есть ли быстрый способ сделать это?

4b9b3361

Ответ 1

Это должно сделать это:

RewriteEngine    On
RewriteCond      %{QUERY_STRING}    ^page=1$
RewriteRule      (.*)               $1?     [R=permanent]

Строка за строкой:

  • Вы включаете функции перезаписи.
  • В качестве условия ( "if statement" ) указывается, что строка запроса должна быть точно page=1 для следующих правил.
  • Затем вы указываете правило, в котором говорится о замене всего пути (. *) самим ($ 1), но сделайте строку запроса пустой (?) и сделайте результат постоянной переадресацией (301).

Если вы хотите, чтобы перенаправление было временным (302), вы можете просто удалить часть =permanent. Moved Temporarily является значением по умолчанию для флага R.

Ответ 2

Вы также можете использовать флаг QSD (Query String Disard) для перенаправления куда-либо без передачи строки запроса.

Ответ 3

Если вы находитесь на Apache 2.4, вы можете просто использовать QSD (флаг сброса строки запроса), чтобы отбросить конкретные строки запроса с вашего целевого URL.

Вот пример для пользователей Apache 2.4:

Старый URL: -/foo/bar/? page = 1

новый URL: -/foo/bar/

Код Htaccess:

 RewriteEngine on

 RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI} [L,R,QSD]

В приведенном выше правиле будет перенаправлен любой uri с ? page = 1, чтобы удалить строки запроса. Этот пример вернет 500 ошибок в версиях Apache ниже 2.4, поскольку они не поддерживают QSD.

В более низких версиях Apache вы можете использовать пустой знак вопроса ? в конце URL-адреса назначения для удаления строк запроса.

Пример:

 RewriteEngine on

 RewriteCond %{THE_REQUEST} \?page=1\sHTTP [NC]
RewriteRule ^ %{REQUEST_URI}? [L,R]

Пример выше работает почти во всех версиях apache.

(Надеюсь, это поможет!)

Ответ 4

Для удаления всей строки запроса это будет достаточно:

RewriteRule ^(.*) http://domain.com/$1? [R=301,L]