Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式重写规则_Regex_.htaccess_Mod Rewrite - Fatal编程技术网

Regex 正则表达式重写规则

Regex 正则表达式重写规则,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我正在努力使用mod rewrite正则表达式,它从URL提取语言并将其转换为http参数 我想重写 mydomain/FR/workingdays\u per\u month\u 2015.htminto mydomain/tables.php?annnecal=2015&language=FR 及 mydomain/ES/workingdays\u per\u month\u 2016.htmintomydomain/tables.php?annnecal=2016&language=ES

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

我想重写
mydomain/FR/workingdays\u per\u month\u 2015.htm
into
mydomain/tables.php?annnecal=2015&language=FR

mydomain/ES/workingdays\u per\u month\u 2016.htm
into
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]
如果url中省略了语言,我想重写为默认语言(英语):
mydomain/workingdays\u per\u month\u 2015.htm
into
mydomain/tables.php?annnecal=2015&language=EN

所以我增加了这个规则:

 RewriteRule ^workingdays_per_month_([0-9]*).htm tables.php?anneecal=$1&language=EN  [L]
这两条规则分别起作用,但不能同时起作用

如果我每月访问
mydomain/workingdays\u\u 2015.htm

我得到了该页面的404(未找到)(当这两个规则在.htacess中一个接一个地添加时)。

您可以像这样保留规则:

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]

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

我的问题实际上来自于运行在windows上的记事本++编辑器和运行在Unix上的web服务器

我的行尾是[LF]

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

在记事本++中, 使用查看|显示符号|显示行尾编辑|下线转换| Unix


解决了我的问题。

您想在此提供更多详细信息吗。