我应该在不改变URL的重定向上使用R = 301吗?

时间:2014-07-16 18:36:34

标签: php apache .htaccess mod-rewrite redirect

我已经将一些页面转换为SEO友好的URL。

旧格式:

mydomain.com/myscript.php?f=1&t=2

新格式:

mydomain.com/f1-t2-some-stuff-tagged-on.html

因为我在URL上标记了一些东西,所以这个重定向是在php中完成的,其中标记的东西需要一些逻辑和处理。最终结果,我得到了一个我很满意的网址。

为了处理新格式,我创建了一个重写规则,确保新格式由myscript处理。它看起来像这样:

RewriteRule ^f([0-9]+)-t([0-9]+)(.*)$ myscript.php?f=$1&t=$2&friendly=1 [NC,L]

这很有效。它不会更改浏览器中的URL,但会执行myscript.php并呈现页面。注意,我添加了一个变量'friendly'来告诉php脚本不要重定向到友好版本,只是渲染页面。

这一切都很棒。我确信有更优雅的解决方案,但我对此很满意,最重要的是IT工作。

所以我的问题是:我想指定新格式是永久性的(即301重定向)。我应该在哪里指定?在PHP重定向从旧格式到新格式?或者.htaccess重写不会改变URL?我在考虑前者,但我想我会和你们一起检查。

1 个答案:

答案 0 :(得分:2)

PHP重定向(从旧格式到新格式)永久格式。您不希望任何人使用旧URL,然后您需要添加此标头:

header('Status: 301 Moved Permanently', false, 301); 

.htaccess重定向(从新格式到真实URL)是透明的。这是您要编入索引的URL,因此您不能指定[R=301]。如果这样做,重定向将停止透明,并且您的URL会更改。