Возможный дубликат:
.htaccess переписать для перенаправления корневого URL в подкаталог
Мне нужно изменить все ссылки (2455) на моем сайте.
Будет проблема, когда посетители приходят из Google (используя старые ссылки), поскольку страница не будет отображаться на странице 404 page not found
Я хочу перенаправить старые ссылки на новую версию страницы. Например:
Старые ссылки:
http://example.com/hotel/13234 http://example.com/hotel/132 http://example.com/hotel/323 http://example.com/page/about_us http://example.com/page/contact
Новые ссылки: (добавить «блог») после домена
http://example.com/blog/hotel/13234 http://example.com/blog/hotel/132 http://example.com/blog/page/about_us http://example.com/blog/hotel/323 ... ... ...
Каков наилучший способ сделать это?
Вы можете перенаправить их на новое Location
с помощью
header('Location: /blog' . $_SERVER['PHP_SELF']);
Если вы используете PHP version> = 5.4.0, вы также можете отправить соответствующий код статуса HTTP 301 (постоянно перемещается) с помощью
http_response_code(301);
Когда вы хотите использовать .htaccess
вы можете перенаправить с RewriteCond
и RewriteRule
.
RewriteEngine On RewriteCond %{REQUEST_URI} !^/blog/ RewriteRule .* /blog$0 [L,R=301]
Директива RewriteCond
предотвращает переписывание URL-адресов, которые уже начинаются с /blog
. В противном случае вы получите бесконечную рекурсию. Директива RewriteRule
префикрует все URL-адреса с /blog
, не применяет дальнейшие правила L
и отправляет код статуса HTTP 301 R=301
.
Чтобы это сработало, эти директивы должны быть разрешены в .htaccess
. Вы можете использовать одни и те же директивы в своем основном файле conf или в контексте виртуального хоста.
Использование mod_rewrite
:
RewriteEngine On RewriteRule $ /blog [L,R=301]
Это будет префикс всех ссылок в blog
и навсегда перенаправить их.