1

在阅读了无数教程之后,我整个上午都在努力尝试弄清楚 mod_rewrite 是如何工作的。

我想最终得到包含我的页面标题和页面 ID 的链接,如下所示。

http://www.example.com/$pageID/$page_title.html

我是否正确地认为我应该通过一个 php 函数运行我网站上的所有链接,该函数使链接成为像上面这样的 SEO 链接类型,然后我会在我的 .htaccess 文件中获得 MOD_REWRITE 以显示实际页面的内容我需要?

似乎是一种奇怪的做事方式?这是正常的吗?我是否需要禁止来自搜索引擎的未经编辑的 URL 以避免重复内容问题?

4

1 回答 1

1

我是否正确地认为我应该通过一个 php 函数运行我网站上的所有链接,该函数使链接成为像上面这样的 SEO 链接类型,然后我会在我的 .htaccess 文件中获得 MOD_REWRITE 以显示实际页面的内容我需要?

这是一种方法,它基于MVC模型,其中一切都通过控制器。例如,如果您网站上的所有内容都是通过/index.php(例如http://yoursite.com/index.php?page_id=1234)访问的,那么您只需在 index.php 中添加一些代码来处理重定向(如果请求的 URL 包含index.php),然后使用 mod_rewrite 将 SEO 友好的 URL 重写为指向/index.php. 如果您已经有一个站点但它不这样做,那么您可以重新设计或将其迁移到控制器或尝试其他方法。

通过其他方式,您可以通过检查请求与 URI 来严格使用 mod_rewrite 处理所有事情。假设您有一个页面:http ://www.evample.com/page.php?id=1234您可以在文档根目录的 htaccess 文件中使用这些规则:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /page.php\?id=([0-9]+)
RewriteRule ^ /page/%1/ [R=301]

这使得请求http://www.evample.com/page.php?id=1234得到一个 301 重定向到http://www.evample.com/page/1234/

现在您需要在内部编写一个规则将其指向 page.php(请注意,MVC 解决方案也需要这部分):

RewriteRule ^page/([0-9]+)/$ /page.php?id=$1 [L,QSA]

这不包括重定向中的页面标题,因为 mod_rewrite 对您网站的页面名称一无所知。如果您通过 page.php 而不是使用 `%{THE_REQUEST} 进行重定向,则可以获取页面标题。

我是否需要禁止来自搜索引擎的未经编辑的 URL 以避免重复内容问题?

只要您使用 301 进行重定向,索引机器人就会指向新的 URL 并解决重复的问题。

于 2012-06-18T16:55:39.253 回答