【问题标题】:Rewrite URL with multiple parameters使用多个参数重写 URL
【发布时间】:2016-07-29 04:36:33
【问题描述】:

我有一个有时包含一个或多个参数的 URL,我希望能够相应地重写。

网址如下:

/index.php?pagetitle=Home

我已经设法让这个 URL 显示我想要使用以下内容:

/Home
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([0-9a-zA-Z]+) index.php?pagetitle=$1 [NC,L]

我也希望能够拥有相同的 URL,但带有文章 ID

.com/index.php?pagetitle=Home&articleid=20

我想这样显示:

.com/Home/20

但我似乎无法弄清楚如何让它在多个参数上工作。

更新: 好的,所以我设法让下面的工作使用: index.php?pagetitle=$1&articleid=$2

显示为: .com/Home/20

我已经尝试更进一步,并且能够使用文章标题以及我尝试的规则如下。

RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA]

所以会显示为: .com/Home/ArticleTitle/20

但它不想为我工作,有没有人知道我做错了什么,并提前再次感谢。

http://karpium.co.uk/Home/Baits/20 - 这个网址有效

http://karpium.co.uk/Home - 但是这个网址在使用 pagetitle= 和 articleid= 时不起作用

【问题讨论】:

  • 我曾经对这个漂亮的 Apache 路由感到头疼,但后来我意识到用 PHP 更容易完成。试试 SLIM PHP„ 与 Apache .conf 文件相比,它具有简单的安静路由和非常高的性能和更多的功能范围
  • 感谢您尝试在 htaccess 中执行此操作的主要原因是因为它是一个大学项目,我们必须以尽可能少的脚本创建网站,但我会看看未来的项目,谢谢

标签: php .htaccess mod-rewrite url-rewriting clean-urls


【解决方案1】:

好吧,看来我已经使用 3 种不同的重写规则修复了它,如下所示:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([0-9a-zA-Z]+)$ index.php?pagetitle=$1 [NC,L,QSA]
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))?/?$ index.php?pagetitle=$1&articletitle=$2 [NC,L,QSA]
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA]

如果有人可以为我阐明正则表达式的某些部分,将不胜感激:

以下是什么意思?

?:/

?/?

再次感谢大家的帮助:)

【讨论】:

  • ?: 用于非捕获组。 (?:/(foo)) 捕获 foo 并将捕获的值保存为 $1 ,没有 ?:捕获组 (/(foo)) 捕获 /foo/? 表示 / 是可选的。您应该阅读有关正则表达式的信息。有很多网站和教程availabe。谷歌搜索。
【解决方案2】:

您可以使用以下规则:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articleid=$2 [NC,L,QSA]

【讨论】:

  • 您能否对此答案添加一些解释?
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多