【问题标题】:Using mod_rewrite to rewrite the URL making it more user and seo friendly使用 mod_rewrite 重写 URL,使其对用户和 seo 更友好
【发布时间】:2017-06-25 14:32:18
【问题描述】:

我希望重写我的 URL,使其更加 SEO 和用户友好,我在这方面花费了大量时间,并且正在努力了解重写过程的工作原理。

我遇到的一个问题是我的网站使用子域被分成几个部分,该网站是一个比较网站,可让您找到产品的详细信息或将产品与另一个产品进行比较。相机部分位于“cameras.specced.co.uk”下,我将来还会制作其他部分,例如“drones.specced.co.uk”和“phones.specced.co.uk”。

目前我通过数字 ID 加载页面信息,例如,这是获取 Canon 1300D 的所有规格的 URL:

http://cameras.specced.co.uk/compare.php?i=98

我想把它改写成这样的东西

http://cameras.specced.co.uk/compare/98

对于并排比较 2 个产品的页面,URL 当前如下所示,(URL 获取 Canon 1300D 与 Nikon D5300 的比较)

http://cameras.specced.co.uk/compare.php?1=98&2=111

我想把这个网址改写成这样的

http://cameras.specced.co.uk/compare/98-vs-111 

这是我想出的,但是不起作用

RewriteRule    ^i/([0-9]+)/?$    compare.php?i=$1    [NC,L]    # Handle product requests

非常感谢任何帮助

【问题讨论】:

  • 看起来一切正常,但您的实际问题是什么?对于您所要求的,仅在 SO 上就有 数百万 个示例,当然其中一个答案会有所帮助?如果不是,既然你又问了,那么另一个答案会有什么不同?
  • 我希望有人可以帮助我使用 mod_rewrite 重写我的 URL,我已经尝试过多次但都失败了,这里有一些,因为我现在真的被卡住了。我想将这个 URL:cameras.specced.co.uk/compare.php?i=98 改写成这样的:cameras.specced.co.uk/compare/98
  • 这很简单。如果您在这样做时遇到问题,请将您当前拥有的代码添加到您的问题中,并解释 exactly 有什么问题,如果您使用它,exactly 会发生什么。
  • 似乎compare/(\d+) 可能是一个起点,您需要在此之前为vs 制定一个规则,并在该规则处停止。
  • 我已经删除了代码,因为它不起作用,你介意给我一个例子,说明你将如何重写这个 url,因为你说它是直截了当的,我很卡住,我会然后看看我如何使它适应我的其他网址

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您正在寻找类似的东西:两条规则,通常首先是更专业的:

RewriteEngine on
RewriteRule ^/?compare/(\d+)-vs-(\d+)$ /compare.php?i1=$1&i2=$2 [END]
RewriteRule ^/?compare/(\d+)$ /compare.php?i=$1 [END]

这些规则适用于动态配置文件(“.htaccess”)和真实的 http 服务器主机配置。如果您决定使用动态配置文件,那么您需要注意首先实际启用它们的解释。看看AllowOverride 指令:https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

如果您使用的是非常旧版本的 apache http 服务器,那么您可能必须将 [END] 标志替换为 [L] 标志。否则,您将收到内部服务器错误,并在 http 服务器错误日志文件中找到相应的提示。

一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

【讨论】:

  • 嗯,从来没有听说过在配置级别包含规则会更好。对于新的重写规则,虽然这需要重新启动 apache 实例,不是吗?
  • @chris85 确实这是一个很少被指出的细节,尽管它甚至是官方文档的一部分:httpd.apache.org/docs/current/howto/htaccess.html 原因很明显:性能、可维护性和安全性。
  • @chris85 是的,主机配置的更改需要重新启动服务器。然而,这可以使用“优雅”策略来完成,因此不会中断服务。
  • @arkascha 非常感谢您的回答并展示了我如何重写这两个 URL...我在根文件夹中创建了一个 .htaccess 并将您的代码粘贴到其中,并创建了另一个.htaccess 在子域根文件夹中,但是似乎没有变化,在浏览器中刷新所有 URL 后,它们仍然没有更改为新的 URL 布局......(如果有区别,我会使用 GoDaddy)谢谢
  • @cousbrad 不太清楚你所说的“仍然没有改变到新的 URL 布局”是什么意思……只是为了确定,因为很多人都想不明白重写是如何工作的:如果你要求 @987654328 @,那么究竟会发生什么?您真的确定(真的吗?)您实际上启用了动态配置文件的解释?通过在此类文件中放置明确的语法错误来检查。然后会发生什么?
猜你喜欢
  • 2015-02-14
  • 2013-09-17
  • 2019-05-29
  • 2012-04-26
  • 2011-06-11
  • 1970-01-01
  • 2014-10-06
  • 2015-07-09
  • 1970-01-01
相关资源
最近更新 更多