Изменение всех ссылок на мой сайт: какой лучший способ?

Возможный дубликат:
.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 и навсегда перенаправить их.