1

www.codinghorror.comにアクセスすると、自動的にwww.codinghorror.com/blogにリダイレクトされます

「/blog/」にリダイレクトするにはどうすればよいですか?

Dreamhost Shared Hostingを使用しているため、サーバーを構成するオプションが限られています。

4

4 に答える 4

6

これは、HTTP ステータス コードについて独学する良い機会です。HTTP 1.1 仕様のステータス コード定義セクションを読んでください。セクション 10.3「リダイレクト 3xx」では、質問に関連するステータス コードについて説明しています。HTTP 3xx コードを知っているということは、意図したセマンティクスを正確に持つ応答を送信できることを意味します。たとえば、リダイレクトが常に発生するようにする場合は、HTTP 301「Moved Permanently」を使用できます。理論的には、クライアントは HTTP 301 応答を信号として使用して、古い URL の代わりに新しい URL 値を保存できます。

非表示の.htaccessファイルで多くの Apache Web サーバー構成ディレクティブを指定できるため、Dreamhost での構成オプションは思ったほど制限されていません。このファイルは Web ドキュメント ディレクトリに配置する必要があります。あなたの例を使用すると、ルート Web ドキュメント ディレクトリ/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 ("Moved Temporarily") が使用されます。

PHP も利用できるので、それもオプションですが、.htaccess を使用した上記のオプションの方が高速である可能性があります。index.php というファイルを/home/midas/codinghorror/に置き、上記の Jeremy Ruten によって提供されたコードを使用します。ここでも、header() の 3 番目の引数にステータス コードを指定できます。

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

それ以外の場合、'Location' で PHP の header() 関数を使用すると、デフォルトで HTTP 302 ステータス応答が送信されます。

于 2009-05-10T15:59:44.867 に答える
3

別のオプションは、Apache の mod_alias を使用して永続的なリダイレクトを行うことです (.htaccess または httpd.conf のいずれかで):

RedirectPermanent / /blog

おそらく、サーバーとプログラミング言語と同じくらい多くの方法があります (おそらくそれ以上です)。使用している特定のテクノロジーを教えていただければ、より具体的な回答が得られる可能性があります。

于 2009-03-29T07:57:13.797 に答える
2

mod_rewrite とその使用を許可するコンテキスト権限を持つ Apache を想定すると、これを仮想ホスト構成または .htaccess に配置します。

RewriteEngine on
RewriteRule ^$ /blog/
于 2009-03-29T07:53:25.773 に答える
2

1 つの方法は、'Location' ヘッダーをクライアントに送信することです。PHP の例を次に示します。

<?php

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

?>
于 2009-03-29T07:53:47.287 に答える