HTTP перенаправить один URL на другой на основе строки запроса

Когда URL /page1.php?abc запрашивается, я хочу, чтобы он был перенаправлен на /page1.php?xyz вместо.

В частности, это то, что я хочу сказать клиенту:

HTTP/1.1 301 Moved Permanently
Location: /page1.php?xyz

Я пробовал директиву Apache RedirectMatch, но, похоже, она не поддерживает строки запроса.

Есть ли другая директива, которая поддерживает HTTP-перенаправление для URL-адресов со строками запроса?

В настоящее время я выполняю это, используя функцию заголовка PHP, но это похоже на временный взлом, поэтому я ищу решение Apache.

2 ответа

Решение

Ты можешь использовать mod_rewrite за это. Если этот модуль доступен, вы используете эти правила (должны быть размещены внутри /.htaccess):

RewriteEngine on
RewriteCond %{QUERY_STRING} ="abc"
RewriteRule ^page1\.php$ /page1.php?xyz [R=301,L]

Существует также решение только для PHP:

if ($_SERVER["QUERY_STRING"] == "abc") {
    header("Location: /page1.php?xyz", true, 301);
    die;
}

Я хотел бы создать файл PHP, который будет генерировать сам, не знаю, модуль / решение Apache, которое может сделать это.

http://php.net/manual/en/function.header.php

Другие вопросы по тегам