2

我想使用 lighttpd 的 mod_rewrite 来允许没有特定文件扩展名的请求。例如,我希望以下映射自动工作:

  • 请求“/index”将服务于“/index.php”。
  • "/dir/file" => "/dir/file.php"
  • "/dir/file?args" => /dir/file.php?args"

这可以通过给定扩展名(例如“.php”)的单个重写规则轻松完成吗?

4

4 回答 4

3

Cassy 和 natbro 几乎是正确的,但正如 user102008 评论的那样,这会错误地重写任何目录索引。添加一个 url.rewrite-once 匹配任何以“/”结尾的东西似乎可以让它工作。

url.rewrite-once = (  "^(.*)/$" => "$1/" )
url.rewrite-if-not-file = ( "^([^?]*)(\?.*)?$" => "$1.php$2" )
于 2012-01-05T05:13:31.073 回答
1

没有测试过,但你可以试一试:

url.rewrite-once = ( 
  "^([^?]*)(\?.*)?$" => "$1.php$2",
)

基本上意味着

  • 除了问号以外的一切
  • 如果存在,请带上问号和后面的所有内容

然后将其重写为第一部分,包含.php并再次添加最后一部分。

再说一遍:我还没有测试过。

于 2009-12-17T21:26:18.757 回答
0

上面卡西的回答是正确的。我建议删除尾随逗号并使用url-rewrite-if-not-file(自 1.4.x lighttpd 起可用)。这使您可以为存在于同一目录中的其他文件提供服务,而无需重写它们。

url.rewrite-if-not-file = ( "^([^?]*)(\?.*)?$" => "$1.php$2" )
于 2010-10-28T20:46:19.087 回答
-1

是的

^(.*).php $1 [L,R,NC,QSA]

那将是目录中的 .htaccess

^/(.*).php http://same.site/ $1 [L,R,NC,QSA]

您的域是“same.site”,因为它需要重定向以更改 URL(而不是代理)

于 2009-11-23T12:40:46.690 回答