2010-04-27 63 views
0

我想用Lighttpd做網址重寫。我有我需要的部分工作。現在,我有這樣的: http://domain.com/name/a/123其重寫爲http://domain.com/name/a.php?pid=123Lighttpd重寫文件和目錄

我做這個重寫一次規則: 「^ /名稱/ A /([^ /] +)」=>「/name/a.php ?pid = $ 1「

該php頁面有外部資源沒有得到重寫,如JavaScript和CSS文件。有沒有辦法讓我可以重寫下面的內容?

http://domain.com/name/a/js/file.js =>http://domain.com/name/js/file.js

回答

0

重寫規則類似下面應該做的工作。在perl的語法,假設$海峽包含http://domain.com/name/a/js/file.js

$str =~ s/\/a\//\// 

從您的部分工作正則表達式給出的正則表達式的語法推斷,在Lighthttpd這應該映射到

"https://stackoverflow.com/a/"=>"/" 

這樣做是什麼,尋找「/ a /「並用」/「代替。應用到你的例子(http://domain.com/name/a/js/file.js)給出http://domain.com/name/js/file.js

+0

我在想,如果我可以做一個正則表達式,我匹配整個字符串,如果它有一個/它應該工作。所以我的規則就像..「^/name/a /(match/here)」=>「/ name/$ 1」我不知道如何匹配整個輸入字符串。 – Ronald 2010-04-27 05:55:56

+0

編寫一個匹配/的正則表達式很容易編寫,但從您的問題看來,您希望以兩種不同的方式重寫字符串。我給你的正則表達式處理第二種重寫。 另外,看看你的部分工作正則表達式,你確定正則表達式 ^/name/a /([^ /] +)=>「/ name/a.php?pid = $ 1 重寫http://域。 com/name/a/123。正則表達式會嘗試在字符串的開頭匹配/ name/..我認爲你需要刪除脫字符(^)。 – Jasmeet 2010-04-27 06:04:46

+0

你在尋找一個正則表達式來完成重寫如果是這樣的話,這是不可能的,在第一個例子中,你想將name/a/123轉換爲name/a.php?pid = $ 1,$ 1將捕獲括號中正則表達式匹配的子字符串。包含文本a.php?pid,因此你永遠無法從原始字符串中捕獲這個 – Jasmeet 2010-04-27 06:28:47