使用ColdFusion控制器的SEO URL?

时间:2012-10-11 12:45:02

标签: apache mod-rewrite coldfusion friendly-url seo

快速参考:区域=门户网站类型页面。

我想要旧网址 http://domain.com/long/rubbish/url/blah/blah/index.cfm?id=12345 重定向到 http://domain.com/area/12345-short-title

http://domain.com/area/12345-short-title 应显示内容。

到目前为止,我已经解决了这个问题,我可以使用apache将所有URL写入

http://domain.com/ index.cfm /long/rubbish/url/blah/blah/index.cfm?id=12345 和 http://domain.com/ index.cfm /面积/ 12345-短标题

index.cfm将为内容提供服务或应用永久重定向,但它需要首先从数据库中获取标题和区域信息。

本网站共有50,000页。我还有其他关于子域重定向和永久子域的想法,并通过index.cfm控制它们的行为。

基础设施热衷于尽可能多地通过Apache重写,我们怀疑它会更快。但是,如果我们需要获取每个页面的区域和标题信息,我不确定我们是否有这个选择。

有没有人有这方面的经验可以提供输入?

-

需要注意的是,我假设我们必须以旧格式保留网站上使用的所有内部网址。改变它们将是一项巨大的工作。

这意味着每次内部网址都必须使用永久重定向。

2 个答案:

答案 0 :(得分:3)

不是将两组URL重定向到同一个脚本,为什么不简单地将它们发送到两个不同的脚本?

就像这样:

RewriteCond ${REQUEST_URI}  !-f
RewriteRule ^\w+/\d+-[\w-]+$ /content.cfm/$0 [L]

RewriteCond ${REQUEST_URI}  !-f
RewriteRule ^.* /redirect.cfm/$0   [L,QSA]

然后,redirect.cfm可以查找替换URL并执行301重定向,而content.cfm只是提供内容。

(您尚未指定CF的设置方式;您可能需要更新Jrun / Tomcat /其他配置以支持/content.cfm/*/redirect.cfm/* - 它将完成与index.cfm相同


出于性能原因,如果可以的话,您仍然希望避免数据库命中重定向,并且可以通过为在Apache端执行301重定向的每个页面生成重写规则来实现。这可以像在.htaccess文件中添加一行一样简单,如下所示:

<cfset NewLine = 'RewriteRule #ReEscape(OldUrl)# #NewUrl#   [L,QSA,R=301]' />

<cffile action="append" file="./.htaccess" output=#NewLine# />

(已从数据库中查找OldUrl和NewUrl。)

你可能还想调查使用mod_alias redirect而不是mod_rewrite RewriteRule,其语法为Redirect permanent #OldUrl# #NewUrl# - 因为OldUrl是一个精确的路径匹配,它可能会更快。

请注意,在完成上述redirect.cfm重定向之前,需要检查这些规则 - 如果它们在同一个.htaccess中,则不能简单地执行追加,但如果它们是在网站的常规Apache配置文件中,将首先检查.htaccess规则。

另外,根据Sharon的评论,您应该验证您的Apache是​​否会处理50k规则 - 虽然我已经看到它报告“数千”基于正则表达式的Apache重写完全正常,但可能存在一些限制(或至少需要拆分多个文件)。

答案 1 :(得分:0)

使用apache重写只会更快,如果它们是静态重写,或者它们都遵循一些规则,你可以在.htaccess文件中的正则表达式中编写。如果你不得不触摸这些重定向的数据库,那么在.htaccess中执行它可能没有意义。

另一种方法是大多数CMS用于处理虚拟目录和重定向的方法。站点根目录下的index.cfm文件处理所有传入请求并返回正确的页面和路径。 MURA CMS使用这种方法(以及Joomla和其他大多数方法。)

基本上,您在传入请求上使用CGI.path_info变量,在数据库中搜索它,并重定向到新路径。像往常一样,Ben Nadel对如何使用这种方法有很好的描述:Ben Nadel: Using IIS URL Rewriting And CGI.PATH_INFO With IIS MOD-Rewrite

但是,您可以使用.htaccess从url字符串中完全删除“index.cfm”,如果您希望将所有传入请求重定向到根URL,并在.htaccess中显示如下内容:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^([a-zA-Z0-9-]{1,})/([a-zA-Z0-9/-]+)$ /$1/index.cfm/$2 [PT]

基本上,这会将http://www.yourdomain.com/your-new-url/之类的内容重定向到http://www.yourdomain.com/index.cfm/your-new-url/,可以按照上面的博客文章进行处理。用户永远不会看到index.cfm。