2012-12-14 153 views
1

我被卡住了一點正則表達式,需要在一箇舊項目的htaccess文件中進行。我想匹配下面的URI如果URI包含擴展名,正則表達式不匹配

/page?id=12 
/admin/users-view?id=3242 
/subscribe 

凡有可能會或可能不會是一個查詢字符串,並且可能會或可能不會是多段

我需要插入一個.php擴展,查詢字符串之前。所以,第一個例子變成

/page.php?id=12 

我也無法與文件擴展名匹配任何URI,使圖像,JS和CSS文件不會匹配。

我想出了這一點:

^([/\w-]+)?/? 

它做什麼,我需要的除了最後一個點。我的正則表達式的能力也很弱,所以任何幫助表示讚賞

+0

我已經添加'.htaccess'標記,所以現在很清楚。 ;) – Leri

+0

順便說一下,在m.buettner的解決方案正則表達式應該工作。 – Leri

回答

1

您可能想要考慮拆分parse_url的URL並在操作後重新組合。

然而,對於一個純粹的正則表達式的解決方案,我想我會嘗試尋找開始斜線的字符串(或字符串的開頭)和一個問號,不包含句:

$url = preg_replace('~(^|/)[^.?]*(?=[?]|$)~', '$0.php', $url); 

parse_url解決方案寧願看起來像:

$urlParts = parse_url($url); 
if(pathinfo($urlParts['path'], PATHINFO_EXTENSION) === null) 
    $urlParts['path'] .= '.php'; 
$url = implode($urlParts); 
+0

感謝您的回覆。我沒有提到我需要在htaccess文件中使用它,所以不能使用parse_url – Leon

+0

這非常接近,但是如果沒有查詢字符串,它就不匹配。有任何想法嗎? – Leon

+0

@萊恩哦對。我會編輯 –

2

不要解析與正則表達式的URI,PHP有內置函數爲

http://php.net/manual/en/function.parse-url.php

音符,也有反向功能,建立網址:

http://php.net/manual/en/function.http-build-url.php

,你應該使用它們,而不是正則表達式,因爲他們(至少應該)正確處理URL編碼

+0

對不起,我應該多解釋一下,這是爲了在.htaccess文件中使用,所以我沒有選擇 – Leon

+0

沒問題,我誤導了「php」標籤:) –

相關問題