用lighttpd重写 - 如何删除文件扩展名

时间:2009-11-21 00:50:19

标签: http lighttpd

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

  • 请求“/ index”将提供“/index.php”。
  • “/ dir / file”=> “/dir/file.php”
  • “/ dir / file?args”=> /dir/file.php?args“

对于给定的扩展名(例如“.php”),可以使用单个重写规则轻松完成吗?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

未经测试,但你可以试一试:

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

基本上意味着

  • 除了问号外,其他所有内容
  • 并且,如果存在,请使用问号和随后的所有内容

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

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

答案 2 :(得分:0)

cassie's answer above恰到好处。我建议删除尾随的逗号并使用url-rewrite-if-not-file(自1.4.x lighttpd以来可用)。这使您可以提供存在于同一目录中的其他文件,而不会被重写。

url.rewrite-if-not-file = ( "^([^?]*)(\?.*)?$" => "$1.php$2" )

答案 3 :(得分:-1)

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

将用于目录中的.htaccess

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

你的域名是'same.site',因为它需要重定向才能更改URL(而不是代理)