将漂亮的网址映射到实际网址时包含失败 (PHP/.htaccess)
Include fails when mapping pretty urls to actual urls (PHP/.htaccess)
我第一次尝试制作漂亮的 urls,这是我的系统,.htaccess 将所有内容映射回 index.php,index.php 将 URL 拆分为一个数组,然后使用 case 语句来决定如何进行。
.htaccess:
RewriteBase /
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
index.php:
$request = $_SERVER['REQUEST_URI'];
#split the path by '/'
$params = explode("/", $request);
var_dump($params);
if(!isset($params[1]) || $params[1] == "") {
require_once('inc/content_default.php');
} else if ($params[1] == "posthandler"){
require_once('bin/posthandler.php');
} else {
switch($params[1]) {
case "dashboard":
include('inc/content_active.php?ign=' . $params[2]);
break;
}
}
问题是当 url 是:[域]/dashboard/AviateX14 时,我收到错误:
Warning: include() [function.include]: Failed opening '/inc/content_active.php?ign=AviateX14' for inclusion (include_path='.:/opt/php-5.3/pear') in /home/u502822836/public_html/index.php on line 92
文件确实存在,问题出在代码上,我知道这一点是因为我已经通过放入 include('index.php') 进行了测试,但它仍然失败。该文件确实存在于 inc/content_active.php.
伙计们,我做错了什么? :(
编辑: var_dump 的 $params 是:
array(3) { [0]=> string(0) "" [1]=> string(9) "dashboard" [2]=> string(9) "AviateX14" }
您不能在 php include()
中包含查询字符串,因为实际上并没有请求它。您必须自己在服务器变量中填写参数:
switch($params[1]) {
case "dashboard":
$_GET['ign']=$params[2];
include('inc/content_active.php');
break;
}
您要求 PHP 查找名为:inc/content_active.php?ign=AviateX14
的文件,包括 ?ign=AviateX14
部分。
解决此问题的一种方法是:
$_GET['ign'] = $params[2];
include( 'inc/content_active.php' );
但是分配给 $_GET
并不是一个很好的做法;你可以做更好的事情。
我第一次尝试制作漂亮的 urls,这是我的系统,.htaccess 将所有内容映射回 index.php,index.php 将 URL 拆分为一个数组,然后使用 case 语句来决定如何进行。
.htaccess:
RewriteBase /
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
index.php:
$request = $_SERVER['REQUEST_URI'];
#split the path by '/'
$params = explode("/", $request);
var_dump($params);
if(!isset($params[1]) || $params[1] == "") {
require_once('inc/content_default.php');
} else if ($params[1] == "posthandler"){
require_once('bin/posthandler.php');
} else {
switch($params[1]) {
case "dashboard":
include('inc/content_active.php?ign=' . $params[2]);
break;
}
}
问题是当 url 是:[域]/dashboard/AviateX14 时,我收到错误:
Warning: include() [function.include]: Failed opening '/inc/content_active.php?ign=AviateX14' for inclusion (include_path='.:/opt/php-5.3/pear') in /home/u502822836/public_html/index.php on line 92
文件确实存在,问题出在代码上,我知道这一点是因为我已经通过放入 include('index.php') 进行了测试,但它仍然失败。该文件确实存在于 inc/content_active.php.
伙计们,我做错了什么? :(
编辑: var_dump 的 $params 是:
array(3) { [0]=> string(0) "" [1]=> string(9) "dashboard" [2]=> string(9) "AviateX14" }
您不能在 php include()
中包含查询字符串,因为实际上并没有请求它。您必须自己在服务器变量中填写参数:
switch($params[1]) {
case "dashboard":
$_GET['ign']=$params[2];
include('inc/content_active.php');
break;
}
您要求 PHP 查找名为:inc/content_active.php?ign=AviateX14
的文件,包括 ?ign=AviateX14
部分。
解决此问题的一种方法是:
$_GET['ign'] = $params[2];
include( 'inc/content_active.php' );
但是分配给 $_GET
并不是一个很好的做法;你可以做更好的事情。