Как вы реализуете простые перенаправления веб-сайта? - PullRequest
1 голос
/ 29 марта 2009

Если перейти на www.codinghorror.com , он автоматически перенаправляется на www.codinghorror.com / blog

Как перенаправить на "/ blog /"?

Я использую Общий хостинг Dreamhost , поэтому мои параметры настройки сервера ограничены.

Ответы [ 4 ]

6 голосов
/ 10 мая 2009

Это была бы хорошая возможность узнать о кодах состояния HTTP. Прочитайте раздел определения кодов состояния спецификации HTTP 1.1; раздел 10.3 «Перенаправление 3xx» содержит коды состояния, относящиеся к вашему вопросу. Знание кодов HTTP 3xx означает, что вы можете отправить ответ, имеющий именно ту семантику, которую вы намереваетесь. Например, если вы хотите, чтобы перенаправление на всегда происходило, вы можете использовать HTTP 301 «Перемещено навсегда». Теоретически клиент может использовать ответ HTTP 301 в качестве сигнала для сохранения нового значения URL вместо старого.

Ваши параметры конфигурации в Dreamhost не так ограничены, как вы думаете, потому что вы можете указать множество директив конфигурации веб-сервера Apache в скрытом файле .htaccess . Этот файл должен быть помещен в каталог веб-документов; Используя ваш пример, вы поместите его в корневой каталог веб-документов, / home / midas / codinghorror / , хотя файлы .htaccess могут быть помещены в любой каталог, обслуживаемый Apache. (Не забудьте указать начальную точку в имени файла.) Ее содержимым может быть либо пример mod_alias, либо уже упомянутый пример mod_rewrite.

Обратите внимание, что директива mod_alias RedirectPermanent отправит вам код состояния HTTP 301. Если вы хотите использовать для этого mod_rewrite, вы можете указать код состояния:

RewriteEngine on
RewriteRule ^$ /blog/ [R=301]

Если вы используете [R] без кода, то используется HTTP 302 («Временно перемещенный»).

Поскольку PHP также доступен для вас, это тоже опция, хотя возможно, что вышеупомянутые опции, использующие .htaccess, работают быстрее. Вы должны поместить файл index.php в / home / midas / codinghorror / и использовать код, указанный Джереми Рутеном выше. Опять же, вы можете указать код состояния в третьем аргументе header ():

<?php
header('Location: http://www.codinghorror.com/blog', TRUE, 301);
?>

В противном случае, используя функцию header () PHP с 'Location', по умолчанию отправляется ответ о статусе HTTP 302.

3 голосов
/ 29 марта 2009

Другой вариант - использовать mod_alias в Apache для постоянного перенаправления (в .htaccess или httpd.conf):

RedirectPermanent / /blog

Вероятно, существует столько же способов, сколько серверов и языка программирования (возможно, даже больше). Если вы сообщите нам, какую конкретную технологию вы используете, она может помочь дать вам более конкретный ответ.

2 голосов
/ 29 марта 2009

Одним из способов является отправка заголовка «Location» клиенту. Вот пример PHP:

<?php

header('Location: http://www.codinghorror.com/blog');

?>
2 голосов
/ 29 марта 2009

Предполагая, что Apache с mod_rewrite и контекстными разрешениями, разрешающими его использование, вы помещаете это в конфигурацию виртуального хоста или .htaccess:

RewriteEngine on
RewriteRule ^$ /blog/
...