2011-08-15 54 views
1

目前,我追加以下網址參數:與htaccess以及PHP處理網頁瀏覽

www.somesite.com/?page_type=view 

我的PHP腳本使用它來確定哪些頁面視圖加載:

if (isset($_GET['page_type'])) { 
    $page_type = $_GET['page_type']; 
    $this->pageType($page_type); 
} else { 
    $this->home(); 
} 

我想以便能夠使用以下url來實現相同的目的:

www.somesite.com/view 

因此,我需要將所有請求重定向到索引。 PHP同時保持原始的網址輸入。

然後,我可以只使用

$_SERVER['REQUEST_URI'] 

得到頁面視圖的名稱。

尋找一些htaccess的建議,

在此先感謝!

回答

1

你有另一種選擇是簡單地設置您的htaccess文件重定向任何404(不可分解)設置就像一面旗幟請求入索引文件這樣的:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php?sef_rewrite=1 [L,QSA] 

從這裏你可以使用PHP的到$ _ SERVER [「REQUEST_URI」]信息訪問解析出來的東西在PHP並手動變量到$ _REQUEST超全局的需要「將您的搜索引擎友好鏈接映射到應用程序中。

這比僅僅強制所有URL上的/ pagetypevar格式提供了更多的可伸縮性。

當您想將頁面嵌套到子類別中時會發生什麼?/info/about_us,/ info/contact_us 如果你想在網址中存儲其他變量(如每頁項目或分頁),會發生什麼?/products/1_My_supercool_item,/ products/2_Another_item

使用將所有未解析請求重定向到應用程序框架並允許應用程序框架重新映射URL的系統將爲您提供最好的控制和最大的可伸縮性。

+0

非常感謝,工作完美。欣賞關於靈活性/可伸縮性的建議。原來,我的godaddy共享主機有另一個問題,其中位於超過2級(來自根目錄)的目錄中的htaccess文件不起作用。可能是找到新的託管服務提供商的時候了。 – DaveKingsnorth

+0

對於超載服務器的主機,這實際上是一個常見問題。通過配置apache使用淺htaccess支持,他們可以在服務器上增加一些額外的網站,然後降低性能。如果你正在尋找一個比godaddy更靈活一些但沒有大幅跳價的人,我可能會建議hostgator.com。我之前已經與他們一起託管了一次性服務器/站點,因爲它們有很大的靈活性,而不需要額外的成本;) – Brian

2

您可以使用的東西線沿線的:

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L] 
</IfModule> 

這將重定向不能解決實際的文件/目錄到您的index.php所有請求。 ?url=$1將包含請求,但在您的情況下,這可能是可選的,因爲您仍然可以從$_SERVER['REQUEST_URI']中獲得該請求。

我在那裏留下了一條RewriteBase行(註釋掉),因爲取消註釋可以幫助來服務器設置。

+0

感謝您的解答和解釋。我認爲布賴恩雖然(但願接受這兩個答案)首先到達那裏。 – DaveKingsnorth

1

使用重寫規則是這樣的:

RewriteEngine On 
RewriteRule /(home|view) index.php?page_type=$1 
1
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /^(.*)$ /index.php?page_type=$1 [L] 
+0

謝謝你的回答。不得不把它交給布賴恩尋求額外的建議。 – DaveKingsnorth