2009-11-21 137 views
1

我想使用lighttpd的mod_rewrite来允许没有特定文件扩展名的请求。例如,我想要以下映射自动工作:用lighttpd重写 - 如何删除文件扩展名

  • 请求“/ index”将服务“/index.php”。
  • “/目录/文件”=> “/dir/file.php”
  • “/目录/文件?ARGS”=> /dir/file.php?args”

可这是轻松地与一个给定扩展的单一重写规则进行(例如 “.PHP”)?

回答

-1

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

那将用于目录中的.htaccess

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

在您的域名是 'same.site',因为它需要重定向的URL改变(而不是代理)

+1

这似乎是使用Apache的mod_rewrite的正确方法。但是,我正在寻找lighttpd的解决方案。 – ssn 2009-11-23 23:10:08

+0

错了,对不起,我以为模式和语法都是一样的 我只涉足与lighttpd的 http://forum.lighttpd.net/topic/504 – GeeKieR 2009-11-24 06:14:21

1

无需测试,但你可以给它一个镜头:

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

基本上就意味着

  • 采取一切,但一个问号
  • ,如果存在,采取以下

问号和一切,你把它改写为第一部分,包括.php并重新添加的最后一部分。

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

+1

不会造成这样的根目录(“/” )被重写为“/.php”? – user102008 2011-03-22 00:04:58

0

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

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

不会导致根目录(“/”)被重写为“/.php”,因为它不是文件? – user102008 2011-03-17 04:48:22

3

卡西和natbro得到这个非常接近正确的,但作为user102008评论说,这错误地重写任何目录索引。添加一个url.rewrite - 一次匹配任何以'/'结尾的东西似乎使它工作。

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

但是如何重定向缺少尾部斜杠的目录名? – 2012-04-07 01:56:43