2009-06-22 60 views
0

我的老闆要我爲URL編寫一個代碼,比如說「http://our.domain.com/SomeText」 - 也就是說,如果URL不包含「.php」或「.html」 ,應該用「http://our.domain.com/process.php?string=SomeText」這樣的腳本來處理。 這是可能的一個簡單的正則表達式?我無法找到正確的表達來做到這一點。 我開始通過將請求重定向到一些特殊的子目錄,但現在它應該直接工作,不需要任何進一步的子目錄,所以我不知何故必須將尋找頁面的常規請求與不包含「.php」或「.html」的請求分開。 ..RegEX for URLrewriting if not「.php」in the path

對我有何建議或鏈接?

此致敬禮, 羅馬。

回答

0

使用mod_rewite你可以這樣做重新寫.PHP和.html的網址是這樣的:

RewriteEngine on 
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA] 

然而,你可能還需要從重寫URL到其實際存在的文件停止它。 (有可能是躺在附近的其他文件 - 圖像/ CSS等,你不希望被重新編寫),你可以修改上面添加檢查:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !\.(php|html)$ process.php/$1 [NC] [QSA] 

添加此檢查可能意味着你不實際上並不需要檢查擴展名是否是.php或.html以外的任何內容,因爲您知道只有在請求的文件不存在時它纔會被重寫,因此您可以將RewriteRule行修改爲:

RewriteRule ^(.*)$ process.php/$1 [NC] [QSA] 

這將意味着任何請求的URL不會作爲文件存在將由process.php處理。

+0

謝謝你一千次,也給所有回答我的問題的人大量擁抱!這個解決方案很適合現在,我很高興我現在不必閱讀O'Reilly的RegEx-bible。 它很棒! – user126922 2009-06-22 13:55:05

1

像這樣的東西應該做的伎倆

RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.php 
RewriteCond %{REQUEST_URI} !\.html 
RewriteRule (.*) /process.php?string=$1 [QSA] 

有關於這是否會在.htaccess的虛擬主機定義去或直接(一些注意事項放置或不放置/ /)。

此外,你應該加載mod_rewrite。

所有這些假設你實際上使用Apache並且可以使用mod_rewrite。

這是做的是,如果請求的URI不包含字符串.php和.html它然後內部重定向到process.php文件的請求與寫入作爲查詢字符串參數。

如果你有這個問題,那麼使用

RewriteLog "/tmp/rewrite.log" 
RewriteLogLevel 9 

,並檢查它是如何工作的。爲此,您必須控制服務器,因爲它必須在主配置文件中使用(不可以使用.htaccess)。

0

至少在mod_rewrite中,您可以使用匹配.php和.html的正則表達式,然後用!作爲前綴,這應該否定它。

相關問題