Как удалить QUERY_STRING в mod_rewrite? - PullRequest
0 голосов
/ 13 марта 2012

Привет всем,

Теперь я хочу использовать модуль mod_rewrite в apache2 для перенаправления URL.

Правило перезаписи выглядит так:

RewriteCond %{QUERY_STRING} ^url=(.+)$
RewriteRule ^/redir$ %1 [R=301,L]

Однако, когда http://website.com/redir?url=http%3A%2F%2Fwww.google.com является вводом, модуль mod_rewrite не может отменить скрытие URL-параметра http% 3A% 2F% 2Fwww.google.com, есть ли способ решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 14 ноября 2012
RewriteMap unescape int:unescape

RewriteCond %{QUERY_STRING} ^url=(.+)$
RewriteRule ^/redir$ ${unescape:%1} [R=301,L]

Apache позволяет определять пользовательские сопоставления перезаписи из различных типов внешних источников.Например, если вы хотите переписать /users/<some alias> в /users/<full name>, у вас может быть текстовый файл, в котором указаны пары псевдонимов / имен, и правило перезаписи, которое переводит часть «псевдонима» URL-адреса с использованием этого сопоставления.

Отображения могут исходить из нескольких типов источников.Примером псевдонима / имени является стандартный тип обычного текста (txt).

RewriteMap также позволяет сопоставить несколько специальных внутренних источников (int).Они просто передают значение во внутреннюю функцию Apache и возвращают результат.Это:

  • toupper: преобразует ключ в верхний регистр.
  • tolower: преобразует ключ во весь нижний регистр.
  • escape: Переводит специальные символы в ключе в шестнадцатеричные кодировки.
  • unescape: переводит шестнадцатеричные кодировки в ключе обратно в специальные символы.

unescape - это то, что выищите.

Дополнительную информацию можно найти в документации mod_rewrite .

0 голосов
/ 13 марта 2012

Да, есть один метод: передайте его в файл Php, затем выполните перенаправление в Php с соответствующим «header».

Что-то вроде:

RewriteCond %{QUERY_STRING} ^url=(.+)$
RewriteRule ^/redir$ /myredir.php?redir=%1 [R=301,L]

А в Php, в файле myredir.php что-то вроде:

<?php
if (isset($_GET['redir'])) {
    header("Location: ".urldecode($_GET['redir']));
}
exit;
?>
...