RewriteRule用于一行

时间:2015-07-01 20:31:01

标签: regex apache .htaccess mod-rewrite

我目前在.htaccess文件中使用以下行来重写几个子目录网址到我网站的根目录:

RewriteRule ^work(.*)$ $1
RewriteRule ^why-me(.*)$ $1
RewriteRule ^prices(.*)$ $1
RewriteRule ^contact(.*)$ $1

但是,有没有办法在一行中表达这一点呢?

我试过了:

RewriteRule ^(work|why-me|prices|contact)(.*)$ $1

但是(不出所料,由于我在正则表达式方面完全缺乏知识),它不起作用并导致所有这些URL给我404错误。

2 个答案:

答案 0 :(得分:0)

您可以使用非捕获组,因为$1现在代表所有目录名称:

RewriteRule ^(?:work|why-me|prices|contact)(.*)$ $1 [L,NC]

答案 1 :(得分:0)

RewriteRule "^(work|why-me|prices|contact)(.*)$" "$2"

RewriteRule "^(?:work|why-me|prices|contact)(.*)$" "$1"

$ 1指的是第一个捕获组,它是您在第一组括号中定义的任何组。由于您在括号内创建了另一个集合,因此$ 1不再引用后面的内容,而是包含workwhy-me等。

第一个解决方案需要2美元,因为$ 1将是:work,why-me等等,$ 2将是其后的任何内容。

第二个解决方案是通过对第一个组使用非捕获组来工作(它没有编号),因此(.*)将它放入$ 1而不是$ 2。