我是关于此重定向的新手,我想知道它是如何工作的? 我有一些名为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,或者知道它是如何工作的,以及它的代码示例。
答案 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该怎么办? - 如果您没有采取适当的预防措施,这可能会真正搞乱您的网站和服务器。