我正在努力使用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中一个接一个地添加时)。
答案 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 强>
解决了我的问题。