没有基本名称的htaccess重定向

时间:2016-11-29 11:09:01

标签: php regex apache .htaccess

我正在使用下面的htaccess处理一些网址

B)https://www.example.com/online/development/id

规则:

RewriteRule ^online/(.*)/(.*)$ filename.php?key=$2 [L]

但现在我想使用下面的一些网址: -

https://www.example.com/development/id

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用此规则 -

RewriteRule ^([\w-]+)/([\w-]+)$ filename.php?key=$2 [QSA,L]

答案 1 :(得分:1)

你的正则表达式匹配:

  • ^ - 输入的开始(HOST之后的部分)
  • online/ - 文字字符序列online/
  • (.*) - 尽可能多的0个字符,直到 last ...
  • / - 斜线,
  • (.*) - 第2组:任何零个或多个字符直到......
  • $ - 输入结束。

因此,正则表达式可以在路径中包含任意数量的子部分。

如果您需要限制子部分的数量,请使用基于否定字符类的正则表达式:

RewriteRule ^[^/]*/([^/]*)$ filename.php?key=$1 [L]

[^/]+匹配/以外的1个字符。由于您未使用第1组,因此我建议删除第一组(),并在替换中使用$1

现在,正则表达式匹配:

  • ^ - 输入开始
  • [^/]* - 除/以外的零个或多个字符([^...]称为否定字符类
  • / - 斜线
  • ([^/]*) - 第1组:见上文
  • $ - 输入结束。

这意味着路径中只能有一个斜杠。