PHP .htaccess和index.php重定向

时间:2012-10-01 07:47:09

标签: php .htaccess redirect

我是关于此重定向的新手,我想知道它是如何工作的? 我有一些名为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 个答案:

答案 0 :(得分: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;
}

}

答案 1 :(得分: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甚至是一个很长的switch / case块的长列表是乏味的(而且很快就无法维护) - 最终,这个URL和文件的一对一匹配不是会有所帮助,因为您可能刚刚离开公共目录中的文件。当然,使用页面控制器(或完整的模型 - 视图 - 控制器)的强大之处在于您不必具有这种一对一的匹配:您可以传递ID甚至“友好”的URL然后可以使用从数据库中提取存储的信息(如博客文章等)。

此外 - 您应该谨慎地将网址映射到include功能 - 如果有人要求http://www.example.com/database.php该怎么办? - 如果您没有采取适当的预防措施,这可能会真正搞乱您的网站和服务器。

相关问题