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,“永久移动”。理论上,客户端可以使用 HTTP 301 响应作为存储新 URL 值来代替旧 URL 值的信号。

您在 Dreamhost 的配置选项并不像您想象的那么有限,因为您可以在隐藏的.htaccess文件中指定许多 Apache 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(“临时移动”)。

由于您也可以使用 PHP,这也是一个选项,尽管使用 .htaccess 的上述选项可能更快。您可以在/home/midas/codinghorror/中放置一个名为 index.php 的文件,并使用上面 Jeremy Ruten 给出的代码。同样,您可以在 header() 的第三个参数中指定状态代码:

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

否则,将 PHP 的 header() 函数与“Location”一起使用会默认发送 HTTP 302 状态响应。

于 2009-05-10T15:59:44.867 回答
3

另一种选择是使用 Apache 的 mod_alias 进行永久重定向(在 .htaccess 或 httpd.conf 中):

RedirectPermanent / /blog

可能有与服务器和编程语言一样多的方法(可能甚至更多)。如果您告诉我们您使用的具体技术,它可能有助于为您提供更具体的答案。

于 2009-03-29T07:57:13.797 回答
2

假设 Apache 具有 mod_rewrite 和允许使用它的上下文权限,您将其放在虚拟主机配置或 .htaccess 中:

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

一种方法是向客户端发送“位置”标头。这是一个 PHP 示例:

<?php

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

?>
于 2009-03-29T07:53:47.287 回答