【问题标题】:basic mod_rewrite / regexp question: Split ID with dash基本 mod_rewrite / regex 问题:Split ID with dash
【发布时间】:2010-11-11 11:30:25
【问题描述】:

我正在尝试为更清晰的 URL 做一些 htaccess 重定向,但我没能做到。

这是我的意图:

/kitap/blah     => kitap.php?a=blah
/kitap/blah-123 => kitap.php?a=blah&b=123

这是我当前的代码。

RewriteRule ^(kitap|yazar)/?([^/\.]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$3 [QSA,L,NC]

目前它正在生产这个:

/kitap/blah     => kitap.php?a=blah
/kitap/blah-123 => kitap.php?a=blah-123

单词“blah”可以包含 Unicode 字符,例如 ç、ö、ğ、ş 等。(这意味着 [a-z0-9_] 在我的情况下不起作用)

我怎样才能实现我的预期结果?我尝试了各种方法,但没有成功。谢谢。

【问题讨论】:

  • 您不能在[^/\.] 中添加- 吗?

标签: regex apache mod-rewrite


【解决方案1】:

我最终得到了来自 Alin 和 battal 的 cmets 的“混合”解决方案。

RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-([0-9]+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]

而且它有效。 谢谢!

【讨论】:

    【解决方案2】:
    RewriteRule ^(kitap|yazar)/?([^/\.-]+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]
    

    RewriteRule ^(kitap|yazar)/?(\p{L}+)?(-(\d+))?/?$ $1.php?a=$2&b=$4 [QSA,L,NC]
    

    $4,不是$3,除非你打算使用破折号-,如果你使用$3$_GET['b']将等于-123。每对括号都很重要,所以$3-123,而$4123

    \p 表示 unicode 字符,{L} 表示字母。您可以在 PHP PCRE regex - Unicode character properties 查看可用的修饰符。要使用它们,您的 PHP 版本必须使用 --enable-unicode-properties 编译。

    【讨论】:

    • 这不太对。 \p 不代表 Unicode 字符。这意味着一个字符具有以下属性。
    • 是的,但是,它是唯一支持 unicode 的特殊类,并且仅在 Unicode 上下文中使用。只需查看相关手册页的 URL。否则,它与\w 没有什么不同。是的,\p 是一个 unicode 字符,它包含 unicode 平面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多