我想使用 lighttpd 的 mod_rewrite 来允许没有特定文件扩展名的请求。例如,我希望以下映射自动工作:
- 请求“/index”将服务于“/index.php”。
- "/dir/file" => "/dir/file.php"
- "/dir/file?args" => /dir/file.php?args"
这可以通过给定扩展名(例如“.php”)的单个重写规则轻松完成吗?
Cassy 和 natbro 几乎是正确的,但正如 user102008 评论的那样,这会错误地重写任何目录索引。添加一个 url.rewrite-once 匹配任何以“/”结尾的东西似乎可以让它工作。
url.rewrite-once = ( "^(.*)/$" => "$1/" )
url.rewrite-if-not-file = ( "^([^?]*)(\?.*)?$" => "$1.php$2" )
没有测试过,但你可以试一试:
url.rewrite-once = (
"^([^?]*)(\?.*)?$" => "$1.php$2",
)
基本上意味着
然后将其重写为第一部分,包含.php
并再次添加最后一部分。
再说一遍:我还没有测试过。
上面卡西的回答是正确的。我建议删除尾随逗号并使用url-rewrite-if-not-file(自 1.4.x lighttpd 起可用)。这使您可以为存在于同一目录中的其他文件提供服务,而无需重写它们。
url.rewrite-if-not-file = ( "^([^?]*)(\?.*)?$" => "$1.php$2" )
是的
^(.*).php $1 [L,R,NC,QSA]
那将是目录中的 .htaccess
^/(.*).php http://same.site/ $1 [L,R,NC,QSA]
您的域是“same.site”,因为它需要重定向以更改 URL(而不是代理)