RewriteRule- 用于选择字符串的正则表达式

Posted

技术标签:

【中文标题】RewriteRule- 用于选择字符串的正则表达式【英文标题】:RewriteRule- regex for selecting a string 【发布时间】:2013-03-01 17:54:21 【问题描述】:

抱歉问题的标题不好。

我的问题是我只想对以下 3 个 url 模式执行内部重写

localhost/abc
localhost/def
localhost/xyz

替换为:

localhost/***/abc
localhost/***/def
localhost/***/xyz

我尝试为任何字符串——^(.*)$ 编写一个正则表达式。 RewriteRule 在下面

RewriteRule  ^(.*)$ /***/$1

但它在无限循环中运行并搜索url

localhost/***/abc/abc/abc/abc...

我想要一个正则表达式,它只检测 3 个字符串中的任何一个 --> "abc"、"def"、"xyz" 然后将附加到最终 url

【问题讨论】:

【参考方案1】:

仅检测这些字符串的正确方法是将它们包含在OR(abc|def|xyz) 中:

RewriteEngine On
RewriteRule ^(abc|def|xyz)$ ***/$1 [L]

您的尝试被抛出了重写循环,因为(.*) 匹配所有内容,包括stackoverlfow。在 OR 组之前加上 ^ 可确保它仅在 URI 的开头匹配。

【讨论】:

以上是关于RewriteRule- 用于选择字符串的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

重写正则表达式,至少有一个字符的 URL

伪静态规则写法RewriteRule-htaccess详细语法使用

如何在 Apache RewriteRule 中向正则表达式添加 +(加号)?

伪静态规则写法RewriteRule-htaccess详细语法使用

PHP 伪静态规则写法RewriteRule-htaccess详细语法使用

正则表达式用于选择花括号内的双引号而忽略外部的引号