2012-10-11 26 views
4

快速参考:area =门户类型页面。使用ColdFusion控制器的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重写来完成,我们认为它会更快。但是,如果我们需要获取每个页面的区域和标题信息,我不确定我们有这个选择。

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

-

一些需要注意的,我假设,我们将必须继续在旧格式的网站上使用的所有内部URL。全部改变它们将是一项巨大的工作。

这意味着所有内部URL必须每次都使用永久重定向。

+0

您打算处理多少个区域?这是一个相当静态的列表? –

+0

那里有100个地方,并有50,000页。它每天增长/变化。地区是太空任务,页面满足这些任务,属于特定地区。 –

+0

我不明白你的意思是什么_“......需要首先从数据库中获得标题和区域信息。”_ - 为什么你需要这些? –

回答

3

与其将这两组网址重定向到相同的脚本,为什么不简单地将它们发送到两个不同的脚本?

只要是这样的:

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的重写规则,在句法将调查Redirect permanent #OldUrl# #NewUrl# - 由于OldUrl是一个确切的路径匹配,它可能会更快。

注意,这些规则将需要上述redirect.cfm重定向前的检查做 - 如果他们在你不能简单地做一个追加相同的.htaccess,但如果是在该网站的一般Apache配置文件,然后将首先检查.htaccess规则。另外,根据Sharon的评论,你应该验证你的Apache是​​否会处理5万条规则 - 虽然我已经看到它报告说“成千上万”基于正则表达式的Apache重写非常好,但可能会有一些限制(或者至少需要分割多个文件)。

+0

谢谢,我会牢记这一点。我更关心使用ColdFusion执行我所描述的操作的性能和必要性。 –

+0

呵呵,刚刚编辑 - 一旦CF不再需要再次查找URL - 它可以将生成的规则附加到.htaccess文件 –

+0

现在很棒!谢谢 –

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。

+0

谢谢,我看过本文的文章。我的'问题'描述了/index.cfm/的使用,我期望使用CGI.PATH_INFO。所以我认为你所描述的是我已经打算做的。有趣的是,在尝试了Mura之后,我终于实现了SEO URL解决方案。这和我打算解决网站被索引通过许多子域的问题! –