正则表达式重写规则

时间:2014-07-22 17:11:11

标签: regex .htaccess mod-rewrite

我正在努力使用mod重写正则表达式,该表达式从URL中提取语言并将其转换为http参数。

我想改写 mydomain/FR/workingdays_per_month_2015.htm进入 mydomain/tables.php?annnecal=2015&language=FR

mydomain/ES/workingdays_per_month_2016.htm加入mydomain/tables.php?annnecal=2016&language=ES

以下规则有效:

RewriteRule ^([A-Z]{2,2})/workingdays_per_month_([0-9]*).htm tables.php?anneecal=$2&language=$1  [L]

如果在网址中省略了该语言,我想重写为默认语言(英语): mydomain/workingdays_per_month_2015.htm进入mydomain/tables.php?annnecal=2015&language=EN

所以我添加了这条规则:

 RewriteRule ^workingdays_per_month_([0-9]*).htm tables.php?anneecal=$1&language=EN  [L]

这两个规则分开工作,但不能一起工作。

如果我访问mydomain/workingdays_per_month_2015.htm 我得到了这个页面的404(找不到)(当两个规则在.htacess中一个接一个地添加时)。

2 个答案:

答案 0 :(得分:0)

你可以保持这样的规则:

RewriteEngine On

RewriteRule ^([A-Z]{2})/workingdays_per_month_([0-9]+)\.htm$ tables.php?anneecal=$2&language=$1  [L,QSA,NC]

RewriteRule ^workingdays_per_month_([0-9]+)\.htm$ tables.php?anneecal=$1&language=EN  [L,QSA,NC]

确保将这些规则放在其他规则之前。

答案 1 :(得分:0)

我的问题实际上来自我在Windows上运行的Notepad ++编辑器和在Unix上运行的我的Web服务器。

我的行尾是[LF]。

我的Unix服务器,期望EOL为[CR] [LF],因此只看到一条规则,而不是两条规则。

在Notepad ++中, 使用查看|显示符号|显示行尾编辑| EOL转换|的Unix

解决了我的问题。