Mod rewrite mod_rewrite条件语句的帮助

Mod rewrite mod_rewrite条件语句的帮助,mod-rewrite,Mod Rewrite,我已经更新了我网站的SEO友好URL,并向谷歌提交了一份新的网站地图。问题是,我似乎在排名中受到惩罚,因为我的旧内容仍然显示在旧URL和新URL(站点地图中的那个)下。我一直在试图找出如何用regex捕获变量,以使下面的工作正常进行,但似乎无法正确完成 有什么想法吗?我们有一个受熊猫/农民更新影响的汽车分类广告 Old URL: http://www.mysite.com/forsale/light-trucks/12345/2010-dodge-ram-1500.html New URL:

我已经更新了我网站的SEO友好URL,并向谷歌提交了一份新的网站地图。问题是,我似乎在排名中受到惩罚,因为我的旧内容仍然显示在旧URL和新URL(站点地图中的那个)下。我一直在试图找出如何用regex捕获变量,以使下面的工作正常进行,但似乎无法正确完成

有什么想法吗?我们有一个受熊猫/农民更新影响的汽车分类广告

Old URL:  http://www.mysite.com/forsale/light-trucks/12345/2010-dodge-ram-1500.html

New URL:  http://www.mysite.com/cars-trucks-for-sale/light-trucks/2010/dodge/ram-1500/12345/2010-dodge-ram-1500.html
现在,这些URL中的任何一个都可以工作(它们重写为脚本:
showcontent.php?id=12345

这意味着重复的内容,因为谷歌仍然知道我的旧网址和我的网站地图都只显示新的网址

我需要显示一个301重定向,并确保我的旧内容在运行中被重写为新格式,但请注意,我有一些新的url参数不在旧url中

RewriteRule ^/?(forsale)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)\.html$ showcontent.php?id=$3 [L]

RewriteRule ^/?(cars-trucks-for-sale)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)/([-a-zA-Z0-9_-]+)/([0-9]+)/([-a-zA-Z0-9_-]+)\.html$ showcontent.php?id=$6 [L]

上面的规则现在起作用了,但我需要将入站请求捕获到第一个,然后将它们重写到第二个。我可以停止尊重原始URL,但我在这些URL上有一些排名,我不想只显示401错误。

据我所知,
内容类型
新内容类型
是常量,这是新旧URL之间的唯一区别

如果是这样的话,有很多方法可以做到这一点:

1.使用mod_rewrite(您要求的--将这些行放在网站根文件夹的.htaccess中。如果放在其他地方,则需要进行一些调整):

哦,由于URL非常相似(基于您提供的示例和描述),您甚至可以采用更简单的方法(注意:这将重定向
/content type/
文件夹中的任何URL。如果您的目标是只重定向与该结构匹配的以.html结尾的URL,则不要使用它):

2.不使用mod_rewrite——新旧URL的URL结构非常相似。。因此,即使这样也可以完成工作(参见上面的注释):

这将重定向(301永久重定向)所有以
/content-type/
开头的URL请求,使其完全相同,但改为以
/new-content-type/
开头


更新:OP提供更真实的URL

因为您的真实URL与旧URL有很大不同,所以没有真正好的方法为此编写单行重写规则。因此,我认为有两个主要选择:

1.为每个旧URL创建重定向规则(如果可能,请将其放在.htaccess顶部,最好放在服务器配置中):

如果你有这么多的旧网址。。那么这种方法就不是很好了——每个请求上都有太多的URL需要测试,再加上维护成本(创建这些重定向规则)


2.继续使用现有的重定向规则(重写为
showcontent.php?id=12345
)。在这个showcontent.php文件中,生成正确的URL(因为它应该在网站上),并与请求的URL进行比较(从
$\u服务器['REQUEST\u URI']
)。如果URL不同,则发出301重定向至正确的URL(使用
header()
函数)。--例如,这就是该网站的工作方式。它可能比.htaccess慢一点(因为PHP必须启动)。。但是更容易实现和维护(几乎零维护成本)。

这是有道理的,但我试图让我的示例过于通用。我会说得更具体一些。请参阅上面我编辑的问题,谢谢您的帮助!谢谢愚蠢的是,我忘了用php做这件事。。。这么简单。。。我想让事情变得更难!
Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteRule ^content-type/([^/]+)/(\d+)/([^/]+\.html)$ http://www.mysite.com/new-content-type/$1/$2/$3 [R=301,L]
RewriteRule ^content-type/(.+)$ http://www.mysite.com/new-content-type/$1 [R=301,L]
Redirect 301 /content-type/ http://www.mysite.com/new-content-type/
Redirect 301 /forsale/light-trucks/12345/2010-dodge-ram-1500.html http://www.mysite.com/cars-trucks-for-sale/light-trucks/2010/dodge/ram-1500/12345/2010-dodge-ram-1500.html