【问题标题】:Removing URL duplicates when using pretty urls使用漂亮的 url 时删除重复的 URL
【发布时间】:2011-05-06 11:50:40
【问题描述】:

我在我的网络应用程序中使用了漂亮的 URL,一个例子是“forum/post/1”,它调用了论坛模块中的 PostController,它加载了一个 id=1 的帖子。这是我需要的,但也可以从“论坛/帖子/视图/id/1”访问该帖子。这很糟糕,因为搜索爬虫不喜欢从多个 URL 访问同一个页面,对吧?

我正在使用支持'useStrictParsing'选项的Yii框架,它告诉传入请求必须匹配至少一个“漂亮”路由,否则请求会失败并返回404。但这不是一个完美的解决方案,因为我没有每个控制器/动作的漂亮 URL。

理想情况下,框架应使用 301 状态代码将“forum/post/view/id/1”重定向到“forum/post/1”。你是如何解决这个问题的?这不是 Yii/PHP 特定的问题,您的框架/工具如何处理它?

【问题讨论】:

    标签: seo friendly-url http-redirect


    【解决方案1】:

    如果没有人链接到您的非漂亮网址,搜索引擎将永远不会知道它们的存在。

    如果您确实想消除它们,您可以通过在 Web 服务器的配置文件中添加别名来绕过您的 Web 框架; url 将在到达框架之前被重定向。

    像 Django 这样不提供“魔术”路由的框架不会遇到这个问题,唯一存在的路由是您手动定义的路由。在这种情况下,您可以为返回适当重定向的非漂亮 url 定义一个视图。

    【讨论】:

    • > 你可以通过在你的网络服务器的配置文件中添加一个别名来绕过你的网络框架——你的意思是.htaccess?
    • Apache 的通用配置文件通常称为 apache2.conf 或 httpd.conf,并保存在安装位置。 .htaccess 文件用于覆盖特定目录的那些配置选项。如果您使用共享主机,您可能无法访问常规配置文件,但您的主机可能会提供一个控制面板来添加别名。
    • 据我所知,别名用于主机名,例如alias.example.com 指向 example.com,不是吗?我需要另一件事:example.com/forum/post/view/id/1 必须指向 example.com/forum/post/1。我认为可以使用 mod_rewrite 来完成
    • 您指的是 DNS 服务器使用的 CNAME 别名。我指的是使用 mod_alias 在您的 Web 服务器中设置的别名。 Mod_rewrite 也可以,但它更复杂,在这种情况下不需要。
    【解决方案2】:

    如果有多种查看内容的方法,确保搜索引擎仅将漂亮网址排在另一页上的最佳方法是在文档标题中添加规范标签

    <link rel="canonical" href="http://www.mydomain.com/nice-url/" />
    

    这对于基于 Windows 的系统非常有用,因为 IIS 的网页不区分大小写,但 Web 标准区分大小写。

    所以

    • www.maydomain.com/Newpage.aspx
    • www.maydomain.com/newpage.aspx
    • www.maydomain.com/NEWPAGE.aspx

    这些都被谷歌视为不同的页面,然后你被标记为具有重复内容的网站,但不是这样的规范,因为在上述情况下,每个页面都将具有相同的规范元标记,并且url 是唯一一个将被搜索引擎使用。

    【讨论】:

    • 好的,我试试看。我认为它符合 xhtml 标准?
    • 我现在添加了一个代码示例,是的,它是一个标准的 html 元素,所以是 xhtml 兼容的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多