2012-08-23 78 views
4

所以我剛開始搞亂Apache的重寫模塊,並想確保我有這個權利,因爲我已經看到它做了幾種不同的方式。我的示例代碼現在只是一個實驗,但它可能最終成爲我正在開發的新項目的基本結構。mod_rewrite最佳實踐

這裏是我的.htaccess文件:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_\-]+)/?$ index.php?id=$1 [L,NC] 
</IfModule> 

我的索引文件:

<?php 
include 'views/headerView.php'; 
switch(strtolower($_GET['id'])) 
{ 
    case "first": include 'views/firstPageView.php'; 
    break; 
    case "second": include 'views/secondPageView.php'; 
    break; 
    default: include 'views/homeView.php'; 
} 
include 'views/footerView.php'; 
?> 

和默認homeView模板:

<p>This is the home page.</p> 
<p>To the first page. <a href="first">First Page</a></p> 
<p>To the second page. <a href="second">Second Page</a></p> 

我主要關注的是僅具有URL模板上錨定標記中的「第一個」和「第二個」。這些網址用於索引文件中的開關,以確定要顯示哪個視圖。我這樣做,所以當用戶點擊一個鏈接時,在重寫模塊的反向引用中將使用「first」或「second」這個詞,並且會在url中顯示爲domain.com/first而不是domain。 COM /?ID =第一。那麼,我在這裏的正確軌道還是我錯過了什麼?任何有用的建議,將不勝感激,謝謝。

+0

Bueller .......? –

回答

2

所以我在這裏正確的軌道上,還是我錯過了什麼?任何有用的建議,將不勝感激,謝謝。

你是在正確的軌道上。你在這裏做什麼沒有錯。當然,你將不得不調整一些東西,但總的來說你是在正確的軌道上。你可能想要爲你產生鏈接,某種映射或某種東西。所以「第一個」和那個映射到「views/firstPageView.php」。然後你可以在你的index.php中使用它來處理路由以及它來生成鏈接。所以如果像「第一」這樣的東西變成「something_else」,你不需要去所有的模板,並手動改變它們。

此外,你有mod_rewrite規則處理可能的尾部斜線。由於尾部斜線會彈出很多隨機性。當mod_dir認爲請求是針對一個目錄時,Apache將301重定向一個缺少尾部斜槓的URL到包含尾部斜槓的URL。你可能想讓所有的鏈接都有一個斜線來避免這種情況。另外,如果您有斜線,則相關鏈接(如<a href="first">First Page</a>)可能會停止工作,因爲URI基址現在是/first/而不是/

+0

很高興知道,謝謝你的回答。 –