301 Перенаправление со старой страницы на новую страницу в Apache не работает - PullRequest
3 голосов
/ 20 сентября 2011

Простое перенаправление 301 не работает в этом случае - например:

Redirect 301 /oldpage http://www.mysite.co.uk/newsubdir/newpage

Сайт является динамическим, и .htaccess уже переименовывает страницы в URL-адреса, удобные для поисковых систем, из URL-адресов, содержащих строку запроса.

RewriteRule ^(.*)/(.*)$  index.php?page_name=$1&sub=$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)([^/])$ http://www.mysite.co.uk/$1$2/ [R=301,L]

Когда мы используем эти 301 перенаправления, как указано выше, в том же .htaccess (внизу), страницы перенаправляются, но строка запроса добавляется в конец URL разочаровывающе, и мы не выяснили, почему и как чтобы предотвратить это.

После перенаправления 301 URL выглядит следующим образом: -

http://www.mysite.co.uk/newsubdir/newpage/?page_name=old-page&sub=

... Вызывает ошибку 404 - это просто строка запроса, добавленная в конце URL, которая нарушает перенаправление.

Пожалуйста, кто-нибудь может посоветовать, что нужно сделать, чтобы это исправить?

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 сентября 2011

Добавьте знак вопроса ? в конце URL, чтобы предотвратить копирование существующей строки запроса на новый URL:

Redirect 301 /oldpage http://www.mysite.co.uk/newsubdir/newpage?

Но поскольку вы уже используете mod_rewrite, я бы порекомендовал использовать его и для этой задачи (поместите это правило над другими вашими правилами перезаписи):

RewriteRule ^oldpage$ http://www.mysite.co.uk/newsubdir/newpage? [R=301,L]
0 голосов
/ 03 апреля 2018

редирект 301 /oldfile.htm http://www.example.com/newfile.htm

Используйте это. Работает нормально.

...