apache — включать сбои при отображении симпатичных URL-адресов в реальные (PHP / .htaccess)

В первый раз, когда я попытался создать красивые URL-адреса, и это моя система, .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-адрес: [домен] / панель инструментов / 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" }

0

Решение

Вы не можете иметь строки запроса в php include(), поскольку это на самом деле не запрашивается. Вы должны будете сами указать параметры в переменных сервера:

switch($params[1]) {
case "dashboard":
$_GET['ign']=$params[2];
include('inc/content_active.php');
break;
}
1

Другие решения

Вы просите PHP найти файл с именем: inc/content_active.php?ign=AviateX14, в том числе ?ign=AviateX14 часть.

Один из способов это сделать:

$_GET['ign'] = $params[2];
include( 'inc/content_active.php' );

Но это не очень хорошая практика назначать $_GET; Есть лучшие вещи, которые вы могли бы делать.

1

По вопросам рекламы [email protected]