htaccess页面到页面重定向和seo友好的URL

时间:2014-03-06 18:25:22

标签: apache .htaccess url mod-rewrite redirect

我有一个htaccess文件的问题,我无法弄清楚它是什么问题。

该网站已针对seo目的重写网址,以便:

www.website.com/page/seo-friendly-url

被重写为

www.website.com/page.php?seo=seo-friendly-url

这是通过以下

完成的
RewriteEngine on
RewriteBase /
Rewriterule ^page/([a-zA-Z0-9_-]+)$ page.php?seo=$1 [NC,L]

现在的问题是我必须将已经被搜索引擎索引的一些页面重定向到新目的地,因为它们不再可用,例如:

www.website.com/page/seo-friendly-url

必须重定向到

www.website.com/page/another-seo-friendly-url

我尝试了类似的东西,但它无法正常工作

Rewriterule ^page/seo-friendly-url$ page/another-seo-friendly-url [R,NC,L]

这个也不起作用

Rewriterule ^page/seo-friendly-url$ page.php?seo=another-seo-friendly-url [R,NC,L]

这看起来很愚蠢,但我找不到问题: - /

感谢您的帮助 EMA


编辑,为anubhava:

您好, 不,我已经设置了重写。 我想要实现的是重定向已经重写的链接。

让我更好地解释一下自己: 目前,我有这个由Google(或任何其他搜索引擎)以美化网址(seo friendly)形式编入索引的网址。网址有以下形式:

www.website.com/page/seo-friendly-url

我已经在htaccess中设置了一条规则,因此重写了之前的链接并转到带有查询字符串的php页面,该查询字符串用于显示某些内容。 页面和查询采用以下形式:

www.website.com/page.php?seo=seo-friendly-url

所以基本上我使用第一个url的最后一部分作为第二个url的查询参数。

通过以下代码实现(并且有效):

RewriteEngine on
RewriteBase /
Rewriterule ^page/([a-zA-Z0-9_-]+)$ page.php?seo=$1 [NC,L]

到目前为止一切顺利。

现在我需要实现的是重定向已被删除的网址:

www.website.com/page/seo-friendly-url

转到新页面

www.website.com/page/another-seo-friendly-url

当然,同样的规则也适用于这个新网址(www.website.com/page/another-seo-friendly-url - >已经重新投放到 - > www.website.com/page.php ?SEO =另一-SEO友好-URL)

我需要做什么才能正确地进行重写?

由于

3 个答案:

答案 0 :(得分:2)

您需要在现有规则之前使用此额外规则:

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+page\.php\?seo=([^\s&]+) [NC]
RewriteRule ^ /page/%1? [R=301,L]

Rewriterule ^page/([\w-]+)$ page.php?seo=$1 [NC,L,QSA]

答案 1 :(得分:0)

也许你愿意接受另一个方向思考的解决方案。

我会尝试在应用程序中处理此问题,而不是通过重写。现在,GET参数seo在page.php中处理。这样做是不是可以通过多个seo别名来识别一个产品?如果必须取消一个产品,那么类似的产品将拥有该别名(只需更改数据库中的一行)。

由于我不知道你正在使用什么软件,这可能是不可能的。

答案 2 :(得分:0)

只需添加如下重定向:

RewriteRule page/seo-friendly-url /page/new-url [R=301,L]

重要提示:由于重写中的L标志,此规则必须高于现有的重写

  

[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l

修改 您希望重定向旧URL以避免重复内容(rewrite = internal,redirect = HTTP 301)