【发布时间】:2021-07-24 07:24:49
【问题描述】:
这是我在 .htaccess 中的重写规则:
RewriteRule ^quiz/([A-Za-z0-9-]+)/([0-9-]+)/?$ quiz/index.php?inv=$1&d=$2 [NC,L]
它非常适合这些 URL,它们有多种大小写,有和没有连字符,并且都带有最后一段的日期:
http://localhost/quiz/C-PFM/2021-04-30/
http://localhost/quiz/cpf-o/2021-04-30/
http://localhost/quiz/ipa/2021-04-30/
http://localhost/quiz/ipacsc/2021-04-30/
http://localhost/quiz/uob-sp/2021-04-30/
http://localhost/quiz/uobsp/2021-04-30/
http://localhost/quiz/Hol-V/2021-04-30/
http://localhost/quiz/HOLVA/2021-04-30/
也就是说,$_GET 正确返回例如
inv=HOLVA; d=2021-04-30
正如预期的那样。
但是,对于这些示例中的每一个,相同的规则都失败(返回 404),这些示例还混合了大小写,有些带有连字符,有些没有:
http://localhost/quiz/CPFM/2021-04-30/
http://localhost/quiz/cpfo/2021-04-30/
http://localhost/quiz/ipac-sc/2021-04-30/
http://localhost/quiz/GLD10US/2021-04-30/
http://localhost/quiz/HolV/2021-04-30/
http://localhost/quiz/OCBCC/2021-04-30/
http://localhost/quiz/PP/2021-04-30/
可以通过在随机位置添加连字符来使一些失败的部分正常工作。实际上,我确实尝试过像这样逃避规则中的连字符,但似乎没有什么不同:
RewriteRule ^quiz/([A-Za-z0-9\-]+)/([0-9\-]+)/?$ quiz/index.php?inv=$1&d=$2 [NC,L]
我还尝试删除 NC 或整个 [NC,L],但没有任何区别。
在第一个 [ ] 块之后,我还尝试了 + 和 *,但这并没有什么不同。
.htaccess 文件没有其他可能发生冲突的相关规则。
为什么不工作的不工作?
TIA
【问题讨论】:
标签: apache .htaccess mod-rewrite url-rewriting friendly-url