我有以下重写器:
RewriteEngine On
RewriteRule ^(.*)-(.*)'.html$ $1.php?filter=$2 [QSA]
RewriteRule ^(.*)'.html$ $1.php
所以example.com/folder/index.php
变成example.com/folder/index.html
和example.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。