【问题标题】:How to have unique URLs for a single dynamic page?如何为单个动态页面设置唯一的 URL?
【发布时间】:2012-10-15 14:32:45
【问题描述】:

我认为我的问题可能措辞不正确,但这就是我想要做的(出于 SEO 目的)。

我有一个页面提供品牌的徽标和描述,例如沃尔沃。我想将同一页面用作所有制造商的模板,但只需更改几个字以相应地为每个制造商定制它。因此,在 URL 中,我将其传递给制造商的变量,例如“www.example.com/cars.cfm?manufacturer=BMW”,它将显示一个页面,提供有关 BMW 的信息。

问题在于,对于每个制造商来说,信息仍然在地址栏中显示为同一页面“cars.cfm”,但我真的希望它转到类似“www.example.com/manufacturers/volvo”的 URL .cfm”,因此它显示为该品牌的唯一页面。但同时我不想为每个制造商创建单独的 CFM(或 php/asp)页面。

有没有聪明的方法来做到这一点?我想这与 URL 重写有关,但不确定。我正在使用 IIS 7.5。


为不同的汽车制造商创建大量子文件夹将非常繁琐。我的网站还将包括其他类型的制造商,用于不同的产品,而不仅仅是汽车。我想 URL 重写会是最好的,但我的想法是为每个制造商提供不同的“页面”,以便改进 SEO。

基本上……

www.example.com/manufacturers/audi.cfm 
www.example.com/manufacturers/bmw.cfm 
www.example.com/manufactueres/volkswagen.cfm

但我真的希望每个页面上的数据都来自一个数据库,该数据库包含每个制造商的唯一数据,例如徽标图像和历史描述。

这是我的意思的一个例子:

http://www.fivestarautocentre.co.uk <-- go to bottom of that page and you can see links to various manufacturers

【问题讨论】:

  • 你想要做的事情可以通过 URL Routing 来完成。使用www.example.com/manufacturers/{id} 之类的路由,请求 www.example.com/manufacturers/BMW 将路由到使用请求参数 id=BMW 处理 www.example.com/manufacturers 请求的任何对象
  • iis.net/downloads/microsoft/url-rewrite 是似乎每个人都在使用的 IIS 的重写过滤器。这会让你做你想做的事,但可能的缺点是你会被绑定到特定的 Web 服务器。如果这对您很重要,请查看 Tuckey 重写过滤器以获取独立于平台的解决方案
  • 这种URL重写也被广泛使用,基于Apache的mod_rewrite:helicontech.com/isapi_rewrite
  • Tukey 重写发生在 servlet 端(即 Jrun/Tomcat) - 如果涉及 Web 服务器,则没有理由等待进行 URL 重写,因此要么使用 IIS 的内置功能或 Helicon插件。

标签: url iis coldfusion url-rewriting


【解决方案1】:

在其他人所说的基础上,首先创建您的 www.example.com/cars.cfm?manufacturer=BMW 页面并使其正常工作。

假设您在 IIS 上,您将在根文件夹中创建一个 web.config 文件(如果它不存在)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>

    <rewrite>
        <rules>
            <rule name="Cars-Rewrite">
                <match url="manufacturer/(\w+)" />
                <action type="Rewrite" url="/cars.cfm?manufacturer={R:1}" />
            </rule>
        </rules>
    </rewrite>

</system.webServer>

我的正则表达式可能已关闭,但也许其他人可以插入正确的正则表达式。

【讨论】:

  • 需要至少是(\w+) - 否则它只会匹配一个字符。除此之外,这取决于制造商可能包含的内容 - 也可以使用 ([^/?#]+) 来捕获任何非斜线字符。
  • 我希望搜索引擎爬虫认为它进入了一个独特的内容静态页面,而不是同一页面,但动态添加了不同的内容。你认为 URL 重写是一种方法吗?
  • URL 重写提供了更整洁的 URL,这有利于人类(这是您的网站的目标)。不要太担心爬虫。
  • 使动态页面表现得更加静态的关键是使用适当的缓存 - 包括发送 Last-Modified 标头,然后检查传入的 If-Modified-Since 标头请求,并(在适当时)以 304 Not Modified 响应而不是进行处理。
【解决方案2】:

您当然可以按照其他人的建议通过 URL 重写来处理这个问题,但我想我会采取不同的方法。特别是出于 SEO 目的。 SEO 的最佳解决方案将是每个品牌的实际 URL。考虑到这一点,相应地创建您的网站。不要使用通用的 www.example.com/cars.cfm 页面,使用 www.example.com/bmw、www.example.com/volvo 等。您仍然可以在每个文件夹下都有一个 ColdFusion 页面无非包括来自其他位置的通用 ColdFusion 模板(或调用 cfc)。由于每个文件夹都有自己独特的存根文件,因此您可以在调用通用 ColdFusion 模板时传递相应的车辆制造商。例如,在 www.example.com/bmw 页面下:

<cfset manufacturer = "bmw" />
<cfinclude template="/mytemplates/genericpage.cfm" />

然后您的 genericpage.cfm 使用分配的变量来显示适当的文本和图形。您甚至可以通过解析 URL 并在包含和执行模板时从中获取制造商来绕过必须在每个文件夹下设置特定变量。我相信cgi.script_name 变量将包含执行此操作所需的路径。

【讨论】:

  • 这很聪明。他可以用 index.cfm 中的那些行使用相同的 URL 结构来处理吗?
  • @KRC 不确定“相同的 URL 结构”是什么意思。我的建议是他为每个汽车制造商创建一个实际的文件夹。包含在其中的通用页面可以位于其他位置,并通过 ColdFusion 映射或类似的方式进行引用。
  • 创建实际文件夹并不是一个特别可扩展的解决方案。只进行 URL 重写要简单得多。
  • @PeterBoughton 如果您对 URL 重写感到满意,它会更简单。另外,我们谈论的是不经常改变的汽车制造商。我只是提供另一种选择。
  • URL 重写 更简单。 (不知道如何做某事不会改变它的复杂性!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多