2013-10-01 60 views
1

目前我正在試圖放棄從URL中的文件名(.PHP)在我的網站和整個下面的.htaccess代碼來到下探文件名:的.htaccess和URL

# Remove filename extension 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

我測試了這一點,它在我的網站上正常工作。我擔心的是該網站將會收到來自世界各地的100,000多個點擊量......這個.htaccess重寫會導致我的服務器出現任何超載情況?

在幾個月前,在另一個項目中,我正在搞定.htaccess中的自定義URL重寫,並且它一直在服務器上重載內存。

有沒有一種方法來保護這種情況的發生,或者這是在.htaccess中重寫這種類型的非問題?

+0

有一點要記住的是,如果您有任何PHP/JavaScript的autodirects或錨標籤將href屬性設置爲somepage.html(和.php),它不會自動將它們更改爲somepage,您需要對此進行不同的重寫。你需要通過並改變所有這些鏈接到somepage(沒有它們的擴展名) – George

+0

這不是一個問題必須這樣做...最初我使用目錄來刪除擴展名,但意識到它保持了拖尾斜線(我也想刪除)。這個代碼是服務器內存的問題嗎?我的擔心是重寫崩潰服務器......我應該擔心嗎? – user2763616

回答

1

閱讀「貪婪」和「懶惰」正則表達式。你的RewriteRule的第一部分是懶惰的(這比貪婪更好);然而,它仍然足以精確地知道它在尋找什麼。

貪婪將需要大量的內存。你可能想讓它成爲[QSA,NC,L]

QSA將添加任何?query=strings,NC迫使url忽略大小寫,而L表示這是最後一次重寫規則,直到下一次重寫條件爲止。


在IFModule結束語是非常重要的,不希望服務器500錯誤,如果重寫是不工作的權利。該RewriteBase會告訴它要得到它是從.htaccess文件是坐在該文件夾的根目錄的文件追捧。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^([^\.]+)$ $1.php [QSA,NC,L] 
</IfModule> 
+0

這是否適用於除main之外的其他目錄?/web /,/ articles/ – user2763616

+0

是的,但不處於當前狀態。編輯答案以反映最佳的.htaccess來做你所要求的。 – 2013-10-01 03:28:47

+0

問題是這個問題200 OK,而不是一個301重定向的.php版本到非php文件。有沒有辦法做到這一點,但301重定向? – user2763616