1

我是这个重定向的新手,我想知道它是如何工作的?我有一些名为 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 或任何想法它的工作原理和示例代码。

4

2 回答 2

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;
}

}

于 2012-10-01T07:52:05.253 回答
0

这不是真正的重定向。您似乎在描述的是一个基本的页面控制器 - 一个进入您的网站框架的单点,可以对不同的请求做出反应。

您需要做的第一件事是考虑您的站点文件夹结构 - 通常,您将在同一级别上有一个“公共”目录和一个“库”(或“包含”)目录。这意味着,只要您将DocumentRootapache 配置中的 设置为/var/www/yoursite/public- 人们将更难在/var/www/yoursite/include.

然后,公共目录将包含您的 .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从数据库中提取存储的信息(如博客文章等)。

Also - you should be careful in mapping URLs to the include function - what if someone were to request http://www.example.com/database.php ? - this could really start messing up your site and server if you haven't taken suitable precautions.

于 2012-10-01T08:05:48.053 回答