帮助mod_rewrite条件语句

时间:2011-08-02 02:04:29

标签: mod-rewrite

我更新了我网站的SEO友好网址,并向Google提交了新的网站地图。问题是,我的旧内容仍显示在旧网址和新网址(网站地图中的网址)之下,我似乎因排名而受到惩罚。我一直在试图弄清楚如何使用正则表达式捕获变量以进行以下工作,但似乎无法正确使用。

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

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

现在,这些网址中的任何一个都可以使用(它们会重写为脚本:showcontent.php?id=12345)。

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

我需要显示一个301重定向,并确保我的旧内容在运行中被重写为新格式,但请注意我有一些新的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]

上述规则现在可以正常工作但我需要捕获第一个的入站请求并将它们重写到第二个。我可以停止尊重原始网址,但我对这些网站有一些排名,我不想只显示401错误。

1 个答案:

答案 0 :(得分:0)

据我所知,content-typenew-content-type是常量值,这是旧网址和新网址之间的唯一区别。

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

1。使用 mod_rewrite (您要求它 - 将这些行放在.htaccess网站根文件夹中。如果放在别处,则需要进行一些调整):< / p>

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteRule ^content-type/([^/]+)/(\d+)/([^/]+\.html)$ http://www.mysite.com/new-content-type/$1/$2/$3 [R=301,L]

哦好吧 - 因为网址非常相似(基于您提供的示例和描述) - 您甚至可以采用这种更简单的方式(注意:这将重定向{{}中的任何网址1}}文件夹。如果您的目的是仅重定向.html结束与该结构匹配的URL,则不要使用它):

/content-type/

2. 不使用mod_rewrite - 旧网址和新网址的网址结构非常相似..所以即使这样做也能完成(参见上面的注释):

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/ 开头的网址请求重定向(301永久重定向)为完全相同但使用/content-type/


更新:OP提供的更多真实网址

因为您的REAL URL与旧URL完全不同,所以没有很好的方法为此编写单行重写规则。因此,我看到两个主要选择:

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

/new-content-type/

如果您有大量这样的旧URL ..那么这种方法并不是很好 - 在每个请求上测试的URL太多+维护成本(创建这些重定向规则)。

2。继续使用您现有的重定向规则(重写为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 的规则)。在此 showcontent.php 文件中生成正确的URL(因为它应该在网站上)并与请求的URL进行比较(从showcontent.php?id=12345获取)。如果网址不同,则问题301重定向到正确的网址(使用$_SERVER['REQUEST_URI']功能)。 - 这就是本网站的工作方式,例如。它可能比.htaccess慢一些(因为PHP必须启动)..但更容易实现和维护(几乎没有维护成本)。