переписать и декодировать URL - PullRequest
2 голосов
/ 11 декабря 2011

Кажется, сайт плохо ссылается на мой.Из инструментов Google для веб-мастеров я вижу около 404 ошибок

domain.com/file.php?id=1 (404) Not found    (Date)

Этот URL-адрес работает нормально, но из-за декодирования страницы браузера реальный (404) URL-адрес

domain.com/file.php%3Fid%3D1 (this is what my browser displays in the url input when I click on google url)

Моя первая попытка была

RewriteRule ^(.*)\%3F(.*)$ $1?$2 [R=301, L]

, чтобы изменить %3F на '?', но это не работает.Это сбивает с толку то, что реально, а что ан / декодировано.

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 мая 2012

Это не элегантное решение, но спустя месяцы это единственный способ, который я нашел.

Обычный регистр

domain.tld/dir/file.php?id=UID&qty=NUM&...   (from old site structure)

переписан как

domain.tld/newfile.php?id=UID&qty=NUM&... [R=301,L]

Таким образом, для запросов типа

domain.tld/dir/file.php%3Fid%3DUID%26qty=NUM%26...   (from old site structure)

я выполняю

RewriteRule ^dir/file\.php(.*)$ script.php?qs=$1 [R,L]

Это ДОЛЖНО быть ПОСЛЕ всех директив, связанных с dir / file.php

Тогда я могу обработатьСтрока запроса $ _GET ['qs'] в script.php

Может не применяться в других ситуациях, которые могут привести к зацикливанию или к нежелательным результатам.

0 голосов
/ 14 марта 2016

используйте флаг [NE] в вашем RewriteRule

0 голосов
/ 29 апреля 2012

Хм, попробуйте это:

RewriteRule ^(.*\%3F.*)\%26([^%]*)(\%3D)?(.*)$ $1&$2=$4 [N]
RewriteRule ^(.*)\%3F([^%]*)(\%3D)?(.*)$ $1?$2=$4 [R=301,L]

РЕДАКТИРОВАТЬ: я вижу, что вы уже тестировали на% 3F ... если это не сработало, то может быть что-то еще.

...