Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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
Php 年、月和日的Url重写_Php_Apache_Url Rewriting - Fatal编程技术网

Php 年、月和日的Url重写

Php 年、月和日的Url重写,php,apache,url-rewriting,Php,Apache,Url Rewriting,我想实现这样的目标:而不是 我希望它只在匹配项为数字时重写,当第一段年份为4位否时,第二段月份在d年的01到12个月之间,最后一段日期在一个月的01到31天之间 请问我如何才能做到这一点我能想到的最好办法是: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(\d{4})/(0[1-9]|10|11|12)/(0[1-9]|[12][0-9]

我想实现这样的目标:而不是

我希望它只在匹配项为数字时重写,当第一段年份为4位否时,第二段月份在d年的01到12个月之间,最后一段日期在一个月的01到31天之间


请问我如何才能做到这一点

我能想到的最好办法是:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\d{4})/(0[1-9]|10|11|12)/(0[1-9]|[12][0-9]|3[01])/?$  index.php?y=$1&m=$2&d=$3 [L]
我认为你应该在脚本中检查月和日的编号。但这里是regexp

更新为使用可选尾随斜杠匹配个位数的日或月

RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])/?$ ?y=$1&m=$2&d=$3
RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/?$ ?y=$1&m=$2
仅适用于带有可选尾部斜杠的年份和月份

RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])/?$ ?y=$1&m=$2&d=$3
RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/?$ ?y=$1&m=$2

你应该检查你的脚本中的月数和日数。@ Tunff No,就像最后两个数字必须是EOL一样。它工作得很好,只是你可能需要考虑最后一个可选的前斜线:非常感谢,我注意到如果01被写为1,它就不起作用了,PLS我们如何修复它呢?此外,如果我只想使用年和月,我是否要删除“?:0[1-9]| 1[0-2]/”?@Ogugua Belonwu:更新的答案。非常感谢,我注意到如果01写为1,它不起作用,请我如何修复它;此外,如果我只想使用年和月,是否删除“0[1-9]| 10 | 11 | 12/”?