我正在爲我創建的網站構建一個小型PHP框架,並且想知道是否可以依靠mod_rewrite作爲大多數主機上的可用工具。我可以依靠mod_rewrite嗎?
使用它甚至是一個好主意嗎? 已有許多優點(一個入口點,「漂亮」,可讀的URL)
它不在哪裏?
如果mod_rewrite在該主機上不可用,我應該在框架中添加一個備選項嗎?
我正在爲我創建的網站構建一個小型PHP框架,並且想知道是否可以依靠mod_rewrite作爲大多數主機上的可用工具。我可以依靠mod_rewrite嗎?
使用它甚至是一個好主意嗎? 已有許多優點(一個入口點,「漂亮」,可讀的URL)
它不在哪裏?
如果mod_rewrite在該主機上不可用,我應該在框架中添加一個備選項嗎?
mod_rewrite的是一般可用。如果它在主機的服務器上不可用,請刪除它們。
如果您正在開發一個公開可用的應用程序,則應該考慮mod_rewrite可能不可用並支持替代方法。 AcceptPathInfo
就是其中之一。
+1您提供的選項越多,您的產品擁有的機會就越多。 – 2010-03-04 17:05:12
mod_rewrite的只是爲Apache,所以如果您需要在IIS或別的東西,你將有問題的工作,但在PHP中,你也可以使用這個:
private function getURI()
{
$uri = "";
if (isset($_SERVER['PATH_INFO']))
$uri = getValueFrom($_SERVER, 'PATH_INFO', @getenv('PATH_INFO'));
elseif (isset($_SERVER['ORIG_PATH_INFO']))
$uri = getValueFrom($_SERVER, 'ORIG_PATH_INFO', @getenv('ORIG_PATH_INFO'));
else
$uri = "";
$scriptname = basename($_SERVER['SCRIPT_FILENAME']);
if (strpos($uri, $scriptname) > -1)
$uri = substr($uri, strpos($uri, $scriptname) + strlen($scriptname), strlen($uri));
return $uri;
}
更改網址是好的做法,actualy,廣泛適用在網絡上,是一個SEO recomendation因爲是最好有這樣的:
domain.com/aboutus
這個
domain.com/index.php?app=main &行動=顯示& ID = 1
mod_rewrite的模塊通常是大多數的Apache承載這些天繳費。但是,要解決缺失問題並不困難,通過這樣做可以確保人們堅持使用關閉的主機/ IT人員或運行IIS的主機/ IT人員等。
當今構建的大多數新框架或應用程序都使用mod_rewrite通過單個前置加載PHP文件(稱爲引導,前置模式等)截取所有URL請求。不是域名的URL部分被解析爲某個對象,並且只要您需要訪問該URL,就會使用該對象。
當mod_rewrite的不可用時,在
http://example.com/index.php/foo/baz/bar
形式URL被代替使用。上述URL的請求由index.php文件處理。然後,您可以解析服務器變量中的一個像
$_SERVER['REQUEST_URI'], $REQUEST['PATH_INFO'], etc.
到一些對象(同一個對象,如果你有mod_rewrite的你會使用),並使用該對象時,你需要訪問的URL信息。
無論哪種方式,你的框架/應用程序的其餘部分只是訪問對象,而不必擔心信息如何進入。
它在大多數服務器可用 - 但如果你懷疑這是不是你應該做一個動態的方式來獲取鏈接 - 然後你可以有你的一切,說是否之前修改預定義常數不是mod_rewrite可用。然後,您可以使用該常量獲取URL以確定發生的情況。
我認爲,任何像樣的應用程序應該使用mod_rewrite
,大多數web主機都提供了這一點。如果他們不提供,請下車。
而且,不只是mod_rewrite
是一個不錯的選擇使用,但也是這樣的php_value
max_execution_time
等其他PHP設置,以確保您自定義您的環境,以滿足您的應用目的。
我說的是我的客戶的主機。 – someone 2010-03-04 16:25:22
這是如何改變答案的?它仍然普遍可用,如果不是,您應該將客戶端切換到不同的主機上。 – ceejayoz 2010-03-04 16:28:09
如果您懷疑客戶端可能無法訪問mod_rewrite的,那麼你應該基於這樣的假設建立自己的框架。 – thetaiko 2010-03-04 16:33:03