【问题标题】:Rewrite rules - Just wanna know is it possible?重写规则 - 只是想知道这可能吗?
【发布时间】:2016-11-20 10:24:44
【问题描述】:

例子:

我想创建一个包含不同分类变量的 url。并且有一个命令。第一个变量是蔬菜({variable01}),第二个是水果({variable02}),第三个是树木({variable03})等等。

xxx.com/{variable01}-{variable02}-{variable03}-{variable04}-......

是的,我得到了这个网址。

但是

如果一个变量有两个(或三个)单词并且我希望分隔符也是一个连字符(布鲁塞尔芽菜)怎么办?

例子:

xxx.com/brussels-sprouts-{variable02}-{variable03}-{variable04}-......

xxx.com/{variable02}-green-apple-{variable03}-{variable04}-......

xxx.com/球芽甘蓝-青苹果

这怎么可能?

谢谢。

【问题讨论】:

  • CMS(如 Drupal)为您生成 URL,而不是 Apache。通过使用.htaccess,您可以添加规则来处理该 URL。
  • 伊戈尔感谢您的回复。我知道。 Wordpress 给了我非常漂亮的网址。谢谢wordpress。但是 wordpress 使用 / 我想要 - 我正在重写 wordpress url 结构。可以制作 xxx.com/brussels-sprouts/green-apple 但我想要 xxx.com/brussels-sprouts-green-apple

标签: php apache mod-rewrite url-rewriting


【解决方案1】:

无法再指定变量的边界,因此只有在您知道变量的确切数量并且只有 1 个变量可能包含连字符的情况下才有可能。您可以为此创建一个正则表达式:

第一个变量:

^([\w-]+)-(\w+)-(\w+)-(\w+)$

第二个变量:

^(\w+)-([\w-]+)-(\w+)-(\w+)$

但是:如果您知道每个变量最多可以有 1 个连字符,您也可以这样做:

/var1-foo1-var2-foo2-var3-foo3-var4

RewriteRule ^(\w+(-\w+)?)-(\w+(-\w+)?)-(\w+(-\w+)?)-(\w+(-\w+)?)$ index.php?var1=$1&var2=$3&var3=$5&var4=$7 [L]

结果:

array (
    'var1' => 'var1-foo1',
    'var2' => 'var2-foo2',
    'var3' => 'var3-foo3',
    'var4' => 'var4',
)

【讨论】:

  • 差不多了。但是这些变量有时可能有 3 个或更多连字符。处理这一切太难了。但这是我想要的。还有一个步骤,所有 url 必须有和结束文本:D xxx.com/brussels-sprouts-green-apple-{variable03}-{variable04}-...-uncle-joe -uncle-joe 有一个连字符并且是所有生成网址的最后一部分。有可能吗?
  • 是的,原理一样,只是将相同的正则表达式部分附加到末尾,即使您不需要它作为变量。
  • 我建议在您的情况下使用 / 作为变量分隔符,除非您有特定的理由不这样做?
猜你喜欢
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多