2009-11-21 73 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