Php 与Mod#u重写和重写URL抗争';s

Php 与Mod#u重写和重写URL抗争';s,php,mod-rewrite,Php,Mod Rewrite,在阅读了无数的教程之后,我整个上午都在努力研究mod_rewrite是如何工作的 我想以包含我的页面标题和页面id的链接结束,如下所示 http://www.example.com/$pageID/$page_title.html 我认为我应该通过一个php函数来运行我网站上的所有链接,使链接变成SEO的链接类型,如上面所述,然后我会在.htaccess文件中重新编写MOD_,以显示我需要的实际页面的内容,这对吗 似乎是一种奇怪的做事方式?这正常吗?我是否需要禁止搜索引擎使用未经编辑的URL以

在阅读了无数的教程之后,我整个上午都在努力研究mod_rewrite是如何工作的

我想以包含我的页面标题和页面id的链接结束,如下所示

http://www.example.com/$pageID/$page_title.html
我认为我应该通过一个php函数来运行我网站上的所有链接,使链接变成SEO的链接类型,如上面所述,然后我会在.htaccess文件中重新编写MOD_,以显示我需要的实际页面的内容,这对吗

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

我认为我应该通过一个php函数来运行我网站上的所有链接,使链接变成SEO的链接类型,如上面所述,然后我会在.htaccess文件中重新编写MOD_,以显示我需要的实际页面的内容,这对吗

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

另外,通过检查请求和URI,您可以使用mod_rewrite严格地处理所有事情。假设您有一个页面:您可以在文档根目录的htaccess文件中使用以下规则:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /page.php\?id=([0-9]+)
RewriteRule ^ /page/%1/ [R=301]
这使得请求得到一个301重定向到

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

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

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

只要您使用301重定向,索引机器人就会指向新的URL并解析重复的URL

我认为我应该通过一个php函数来运行我网站上的所有链接,使链接变成SEO的链接类型,如上面所述,然后我会在.htaccess文件中重新编写MOD_,以显示我需要的实际页面的内容,这对吗

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

另外,通过检查请求和URI,您可以使用mod_rewrite严格地处理所有事情。假设您有一个页面:您可以在文档根目录的htaccess文件中使用以下规则:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /page.php\?id=([0-9]+)
RewriteRule ^ /page/%1/ [R=301]
这使得请求得到一个301重定向到

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

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

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


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

您想将其重写到哪个URL?原始链接是什么?(你想让他们像你描述的那样结束)@micha www.mywebsite.com/category.php?id=97是你现在的意思吗?你想重写哪个url?原始链接是什么?(你想让他们像你描述的那样结束)@micha www.mywebsite.com/category.php?id=97是目前的情况,如果这是你的意思的话?我猜第二种方法是最好的,因为我的所有链接都不在同一个页面上,老实说,我想了解更多关于mod_重写的内容。那么,获取页面标题的最佳方式是什么?这是怎么做到的?感谢通过mod_重写来获取页面标题并不简单,它取决于您将标题存储在何处(我假设存储在数据库中)。您可以通过使用RewriteMap和编写脚本从数据库中获取标题来获取标题。是的,它们位于mySQL数据库中。如果我更改链接以包含标题,比如:
mywebsite.com/category.php?id=97&page\u title=page+title
我可以不使用它来进行我想要的重写,或者这是一种不好的做法吗?你可以从
page\u title
查询字符串参数中提取标题,但任何人都可以将他们想要的任何东西粘贴在其中。这意味着我可以转到
mywebsite.com/category.php?id=97&page_title=made+up+title
并被重定向到
mywebsite.com/97/made+up+title
,这将导致重复的内容问题,因为它将与
mywebsite.com/97/the+actual+title
相同。在这三个php的顶部进行检查会更容易我想第二种方法是最好的,因为我的所有链接都不在同一个页面上,老实说,我还是想了解更多关于mod_rewrite的知识。那么,获取页面标题的最佳方式是什么?这是怎么做到的?感谢通过mod_重写来获取页面标题并不简单,这取决于您所处的位置