【问题标题】:Clean url in php with two get parameters使用两个获取参数在 php 中清理 url
【发布时间】:2016-02-04 23:51:41
【问题描述】:

我正在编写一个使用干净 URI 的 PHP 脚本。

我的问题是,我有一个页面首先不使用 get 参数,然后是一个,最后是两个。

.htaccess 文件中的行当前如下所示:

 RewriteRule ^birthing-records/([^/]+)/?$ birthing-records.php?url=$1 [L,QSA,NC]

但是如果我像这样添加第二个参数:

RewriteRule ^birthing-records/([^/]+)/([^/]+)/?$ birthing-records.php?url=$1&second=$2 [L,QSA,NC]

脚本将我重定向到错误页面。

我该如何设置?

对于这种情况,我需要在.htaccess 中添加两行吗?

我通常会通过简单地调用另一个页面来解决这个问题,但我想保留我现在使用的确切 URI,因为所有这些页面都在 Google 上编入索引。非常感谢任何帮助。

【问题讨论】:

  • 我认为您不应以 Google 为借口不更改 URI 或您对网站的操作方式,Google 将在几天或几周内重新索引您的页面(取决于流量flow) 并且如果 Google 使用更多内容描述性 URI,它将从重新索引中受益
  • “对于这种情况,我需要在 .htaccess 中添加两行吗?” – 当然,如果您想捕获 birthing-records/123 之类的内容,因为您的修改后的规则现在要求后面跟着第二个斜杠组合。 (或者您还需要将第二次出现设为可选。)

标签: php .htaccess clean-urls


【解决方案1】:

您需要为每个规则设置一个规则,否则只要您放置一个参数,它就会中断。

RewriteRule ^birthing-records/([^/]+)/?$ birthing-records.php?url=$1 [QSA,NC]
RewriteRule ^birthing-records/([^/]+)/([^/]+)/?$ birthing-records.php?url=$1&second=$2 [L,QSA,NC]

感谢@Martin 的注释:第一个选项的 L 选项已被删除,因为 L 选项表示要运行的最后一个规则(L 选项只能存在一个规则)

否则,据我所知,它们每个都可以单独工作,但是如果您想接受 1 或 2 个参数,那么您需要两个规则。

你可以在这里测试 htaccess 的东西:http://htaccess.mwl.be/

【讨论】:

  • 另外值得注意的是,Last 标志已从非最后的 RewriteRule 中删除,这听起来很明显,但人们会错过这些排序细节......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2020-06-29
  • 2013-03-04
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多