自制网址缩短程序重定向与301重定向冲突


11

我有一个最初使用经典ASP构建的网站。大约一年前,它已用PHP重写。这导致文件扩展名发生更改,某些页面被移至网站中的新位置。自然地,我们进行了301次从旧URL到新URL的重定向,以便他们的用户和搜索引擎可以找到他们的新位置。这很好。

我们还为他们构建了一个工具,该工具使网站所有者可以创建自己的微型URL,该URL会重定向到页面中包含URL中包含的Google Analytics(分析)广告系列跟踪变量,以便他们可以跟踪广告系列并查看其效果。

我遇到的问题是广告系列跟踪规则与301重定向冲突,并完全阻止了重定向。

这是广告系列跟踪代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

如您所见,它会检查文件是否存在以及是否不存在,它会重定向到跟踪脚本(tracking.php),然后该脚本将获取跟踪代码并使用查询中的Google Analytics(分析)广告系列代码重定向到正确的URL串。

该代码导致如下规则失败:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

这是合理的,因为跟踪规则说:“如果找不到文件,则重定向到tracking.php”,这不能一起工作。我需要的是让301重定向首先运行,如果它们都不匹配,则重定向到跟踪脚本。将跟踪规则放在301重定向下方不会更改结果。

可以通过.htaccess完成吗?还是我需要修改跟踪脚本,以便在未找到广告系列的情况下进行检查以查看广告系列ID是否实际上是需要重定向的旧页面,然后从该页面进行301重定向?

Answers:


5

尝试将您的mod_alias重定向转换为mod_rewrite指令。


编辑:以下示例假定您已用相同路径下的PHP文件替换了旧的ASP文件。

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

...或者您可以跳过正则表达式变量,并为每个旧URI设置显式重定向:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

编辑2:这是一个示例,应涵盖您将遇到的大多数情况:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

我不确定你是什么意思。您能否根据我在问题中显示的内容举一个例子?
约翰·孔德

感谢您的修改。现在有意义。我想我的最后一个问题是如何处理路径已更改的文件?那可能吗?还是我要求太多?
约翰·孔德

您可以为这些文件设置显式重定向(如果大多数路径已更改,则最好对所有文件使用显式重定向,以确保配置可维护)。
danlefree 2011年

我怀疑[R=301,L]每次重定向后都没有引起我问题的原因。让我尝试一下,让您知道会发生什么。
约翰·孔德

*.asp -> *.php通配符的伟大工程。不是直接转换且具有查询字符串的页面的各个规则很麻烦。但这似乎是正确的方法。如果我不能整理出那部分,我将开始一个新的问题。
约翰·孔德

-1

我会撤消重定向并将其保留为原来的样子。将您的新站点重定向到您的旧站点。您的OLD网站可能已经从反向链接,网站使用年限和SEO中受益。仅仅将其替换为具有较低页面等级的较新网站,就失去了真可惜。Google惩罚重定向。您的新站点尚无任何SEO,因此最好在该站点上使用重定向:)


我认为回归不是一个好的解决方案。原始站点几乎在所有方面都做得不好。我们使网站速度更快,可用性更高,可访问性,组织性和可维护性。他们不会从重定向中丢失任何东西,因为它是一个利基网站,并且很少有开头的链接,并且大多数都转到了不需要重定向的主页。因此,我们绝对不希望回到旧站点,因为我们一无所获,损失惨重。
约翰·孔德

仅供参考,Google不会对重定向进行惩罚。重定向的唯一问题是,如果它们被束缚得太深,它们就会停止追随它们,并且在执行301时会丢失一些PR,但是与完全不执行此操作的替代方法相比,该数量微不足道且值得。
约翰·孔德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.