2012-10-01 98 views
1

我是新的重定向,我想知道它是如何工作的? 我有一些所謂的index.php文件,我想hadlle任何目錄中的網站PHP .htacces和index.php重定向

index.php 

<?php 
    if(empty($dir)){ 
    include('includes/home.php'); 
    } 
    if($dir=='profile'){ 
    include('includes/profile.php'); 
    } 
    elseif($dir=='settings'){ 
    include('includes/settings.php'); 
    } 
    else{ 
    include('includes/404.php'); 
    } 
    ?> 

的網址是:

test 1. www.example.com/ - will view the include home. 
test 2. www.example.com/settings - will view the include settings. 
test 3. www.example.com/errorsample - will view the include 404 page. 

如何使.htaccess,並使用該代碼的index.php或任何想法如何工作和它的示例代碼。

回答

2

我會試着用一個簡單的例子來解釋這個。考慮以下.htaccess文件

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^(.*)$ /index.php?x=$1 [L] 
#^This is the rule that does the redirection 

它所做的是,它的路線每一個URL請求發送到index.php請求。它如何發送它?我會舉幾個例子來說明。

  • www.example.com/settings將被髮送的www.example.com/index.php?x=settings
  • www.example.com/errorsample將被髮送作爲www.example.com/index.php?x=errorsample

所以,現在你是配置的index.php,決定你想要做什麼,用我們的價值在$_GET['x']

switch($_GET['x']) { 
    case "profile": include("include/profile.php"); break; 
    // .... similarly other cases 
    default: include("includes/home.php"); break; 
} 

}

+0

爲什麼它不起作用? .htacces #BEGIN WordPress的 RewriteEngine敘述在 重寫規則^(。*)$ /index.php?x=$1 [L] #END WordPress的 的index.php

  

+0

Wordpress有這種類型的導航自己的'.htaccess'文件。它可能有其他規則來覆蓋我的規則。 – Starx

0

這不是真的重定向。你似乎要描述的是一個基本的頁面控制器 - 一個進入你的網站框架的單一點,它可以對不同的請求作出反應。

需要用這個做的是想想你的網站的文件夾結構的第一件事 - 通常情況下,你有一個「公共」目錄和「庫」(或「包括」)在同級別的目錄。這意味着,只要您將您的apache配置中的DocumentRoot設置爲/var/www/yoursite/public - 人們就很難在/var/www/yoursite/include的「include」目錄中找到您的PHP代碼。

公共目錄將包含您的.htaccess和index.php文件。

最簡單的設置是那麼有這個在你的.htaccess:

RewriteEngine On 
RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA] 

這捕獲發送到網站的URL,並集作爲PHP的$ _GET數組中的值。這裏的QSA選項意味着如果你的鏈接有一個查詢字符串(類似於http://www.example.com/module?parameter=value),那麼這些信息也會傳遞給你的腳本。

我覺得你會發現它很繁瑣(並且很快無法維護)來創建if/else甚至長切換/大小塊的長列表 - 最終,這種URL和文件的一對一匹配isn'這樣做會很有幫助,因爲您可能剛剛在公共目錄中留下了可用的文件。當然,使用頁面控制器(或全模型 - 視圖 - 控制器)的強大之處在於,你不必有這樣的一對一場比賽:你可以通過ID或然後可以使用甚至「友好」的URL從數據庫中提取存儲的信息(如博客文章等)。

另外 - 你應該小心地將URL映射到include函數 - 如果有人要請求http://www.example.com/database.php? - 如果你沒有采取適當的預防措施,這可能真的開始搞亂你的網站和服務器。