2012-10-01 81 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? - 如果你没有采取适当的预防措施,这可能真的开始搞乱你的网站和服务器。