2016-07-22 12 views
0

У меня есть несколько старых URL-адресов, которые мне нужно перенаправить, к сожалению, некоторые из них содержат пробелы. Я перенаправляю их на свой сценарий redirect.php, но по какой-то причине, когда URL-адрес содержит пробел или %20, в URL после перенаправления этот% 20 повторяет неограниченное время. Это, похоже, происходит только сейчас, когда мы переключили сервер на HTTPS, когда работаем на субдомене http или на моем локальном компьютере, он работает правильно..htaccess redirect показывает несколько% 20, когда URL содержит место на HTTPS

Мое правило:

RewriteRule ^/?(gallery\.php)(.*) /redirect.php$2 [R,L]

Это работает правильно:

gallery.php?place=name ->redirect.php?place=name

Но это происходит, когда URL содержит пространство:

gallery.php?place=long%20name ->

redirect.php?place=long%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name

Я попытался добавить [B] и [NE] флаги, но без успеха. Есть что-то, чего я не вижу?

UPDATE 1: Чтобы исключить другие правила в htaccess, я создал новый пример. У меня есть пустой каталог /test/, внутри пустой файл /test/index.php и /test/.htaccess файл, который содержит:

RewriteEngine On 
RewriteRule ^/?(index\.php)(.*) /$2 [NE,R,L] 

То есть все. Тем не менее поведение странно, например: /test/index.php?a=xy работает, как ожидалось, но /test/index.php?a=x%20y повторяет знак% 20.

+0

Интересно, он должен работать. Он работает для меня с вашим точным кодом, используя SSL. У вас есть другие перезаписи/переадресации в вашем .htaccess? Если это так, то все это в вашем вопросе может пролить свет. – Vrac

+0

@ Vrac Я обновил свой вопрос и добавил живой пример – Ziki

+0

Вы управляете этим сервером? Установите 'LogLevel alert rewrite: trace6' в httpd.conf и запустите журнал ошибок apache. – Vrac

ответ

0

Так что в конце концов мне удалось решить проблему, изменив правила .htaccess. Поэтому я делаю все перенаправления от HTTP к моему сценарию перенаправления, который также находится на HTTP. Затем этот скрипт разрешает правильный новый URL-адрес, который уже находится на SSL без пробелов, а затем скрипт перенаправляется туда. Fortunatelly все старые URL-адреса находятся на HTTP, поэтому этого достаточно, мне не нужно переназначать этот параметр на SSL.

Также флаг [NE] полезен при перенаправлении URL-адресов с помощью %20, так как он предотвращает дальнейшее кодирование процентного знака в новом URL-адресе.

 Смежные вопросы

  • Нет связанных вопросов^_^