Php 使用ApacheModRewrite的友好URL

Php 使用ApacheModRewrite的友好URL,php,regex,apache,mod-rewrite,Php,Regex,Apache,Mod Rewrite,我已经读了一段时间了,我已经很接近了,但正在与最后的障碍作斗争 我有这样一个url: site.com/detail/123/some-description/maybe-some-more-description 我想成为什么样的人 site.com/details.php?id=123 到目前为止我已经知道了 RewriteRule detail/(.*)/.*$ details.php?id=$1 根据这个()的结果 details.php?id=123/一些文本 我该如何去掉最后的一些

我已经读了一段时间了,我已经很接近了,但正在与最后的障碍作斗争

我有这样一个url: site.com/detail/123/some-description/maybe-some-more-description

我想成为什么样的人

site.com/details.php?id=123

到目前为止我已经知道了

RewriteRule detail/(.*)/.*$ details.php?id=$1
根据这个()的结果

details.php?id=123/一些文本


我该如何去掉最后的一些文本呢?

在您的情况下,似乎您还有一组
/text/

将规则更改为:
RewriteRule detail/(.*)/.$details.php?id=$1

RewriteRule detail/(.*)/(.*)/.$details.php?id=$1

如果您不知道有多少斜杠,可以使用带有排除斜杠的组
[^\/]*

RewriteRule detail/([^\/]*)/.*$details.php?id=$1

试试这个:

  • 正则表达式:
    (.*detail)\/(\d+)\/.
  • 替换:
    $1.php?id=$2
这将导致
site.com/detail.php?id=123

它们都可以在同一时间进行测试

  • (.*detail)
    将网站基本URL与
    详细信息
    匹配,并捕获到组
    $1
  • \/
    与斜杠本身匹配(必须转义)
  • (\d+)
    匹配号码并将其捕获到组
    $2
  • \/.*
    与URL的其余部分匹配,不将其包含在替换内容中会有所帮助
编辑:你介意
detail
details
之间的区别吗?

RewriteRule^([A-Za-z0-9]+)$file.php?key=$1[L,QSA]

在锚定标签中使用

  <a href="details/<?php $id?>">

感谢您的快速回复。那么你需要知道下面斜杠的数目吗?例如,我不能说将第一个斜杠中的内容存储为$1,然后忽略它后面的所有内容?酷,我认为这样做了。我不认为我需要第一组,但这基本上就是我要找的:detail\/(\d+)\/.*所以我把它添加到Wordpress中,它在.htaccess RewriteRule^(.*)\/details\/([a-zA-Z0-9\+)\/./detail/?id=[QSA,L]中生成了以下内容这似乎不起作用,我可以看到它在这里匹配,在这里似乎没问题:但当我通过Apache/Wordpress在本地运行它时,它似乎不起作用。有什么想法吗?