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

使用lighttpd重写-如何删除文件扩展名,http,lighttpd,Http,Lighttpd,我想使用lighttpd的mod_rewrite来允许没有特定文件扩展名的请求。例如,我希望以下映射自动工作: 请求“/index”将提供“/index.php” “/dir/file”=>“/dir/file.php” “/dir/file?args”=>/dir/file.php?args” 对于给定的扩展名(例如“.php”),使用一个重写规则是否可以轻松完成此操作?是 ^(.*)菲律宾比索$1[L、R、NC、QSA] 这将用于目录中的.htaccess ^/(.*)菲律宾比索$1[L

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

  • 请求“/index”将提供“/index.php”
  • “/dir/file”=>“/dir/file.php”
  • “/dir/file?args”=>/dir/file.php?args”
对于给定的扩展名(例如“.php”),使用一个重写规则是否可以轻松完成此操作?

^(.*)菲律宾比索$1[L、R、NC、QSA]

这将用于目录中的.htaccess

^/(.*)菲律宾比索$1[L、R、NC、QSA]


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

而无需对其进行测试,但您可以尝试一下:

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

  • 除了问号,什么都可以
  • 并且,如果存在,请使用问号和后面的所有内容
然后重写到第一部分,包括
.php
并再次添加最后一部分

再次声明:我还没有测试过它。

基本正确。我建议删除后面的逗号并使用(从1.4.x lighttpd开始提供)。这样,您就可以为同一目录中存在的其他文件提供服务,而无需重写它们

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

Cassy和natbro的观点几乎正确,但正如user102008所评论的那样,这会错误地重写任何目录索引。添加url.rewrite(一次匹配以“/”结尾的任何内容)似乎可以让它正常工作

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

这似乎是使用Apache的mod_rewrite的正确方法。但是,我正在寻找lighttpd的解决方案。呃,对不起,我认为模式和语法是相同的,我只是涉猎了lighttpd。这不会导致根目录(“/”)被重写为“/.php”,因为它不是一个文件吗?这不会导致根目录(“/”)吗要重写为“/.php”?但重定向缺少尾部斜杠的目录名又如何呢?