当值包含连字符时,htaccess重写器不起作用


htaccess rewriterule not working when value contains hyphen

我有以下重写器:

RewriteEngine On
RewriteRule ^(.*)-(.*)'.html$ $1.php?filter=$2 [QSA]
RewriteRule ^(.*)'.html$ $1.php

所以example.com/folder/index.php变成example.com/folder/index.htmlexample.com/folder/index.php?filter=value变为example.com/folder/index-value.html

工作,echo $_GET["filter"]输出

但当我尝试example.com/folder/index-value-two.html输出值2时,我得到错误:

未找到

在此服务器上找不到请求的文档。

这里有什么问题?

您的RewriteRule在第二个连字符上分裂,而不是第一个连字符,因此它试图发出的请求是example.com/folder/index-value.php?filter=two,由于index-value.php不存在,因此会给您404错误。尝试使用这个替代:

RewriteEngine On
RewriteRule ^([^'-]*)-(.*)'.html$ $1.php?filter=$2 [QSA]
RewriteRule ^(.*)'.html$ $1.php

通过将.更改为[^'-],可以将除连字符之外的任何字符与第一组匹配,而不是将任何字符匹配。这应该在第一个-处拆分URL。