То ли лыжи не едут, то ли я...

12
chemax
На сайте с 07.01.2009
Offline
206
888

Сижу втупил.

Код index.php:


switch ($_GET['do'])
{
case 'main':
require_once (Root_Dir.'system/main.php');
break;

case '404':
require_once (Root_Dir.'system/404.php');
break;


default:
require_once (Root_Dir.'system/404.php');
break;

}

Код .htaccess:


RewriteEngine on
RewriteRule ^$ /index.php?do=main
ErrorDocument 404 /index.php?do=404

Все нормально, но почему при запросе вида site.ru/?do=asdasdasdas подключается main.php ?

При запросе вида site.ru/index.php?do=asdasdasdas подключается 404.php .

Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
ewg777
На сайте с 04.06.2007
Offline
225
#1
RewriteRule ^$ /index.php?do=main

Срабатывает. В чем проблема?

T.R.O.N
На сайте с 18.05.2004
Offline
314
#2

chemax, index.php приписан как дефалтовый для сайта?

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
chemax
На сайте с 07.01.2009
Offline
206
#3
T.R.O.N:
chemax, index.php приписан как дефалтовый для сайта?

DirectoryIndex index.php

не помогает...

ewg777:
Срабатывает. В чем проблема?

По моей логике при передаче левого параметра do в index.php, должно сработать дефолный case.

Я конечно понимаю, что проще в дефолтный case запихать подключение main.php , но тогда трудно исключать дубляжи страниц.

Я хотел привязать что бы только при переходе на http://site.ru/ или http://site.ru открывалась главная страница

mfl
На сайте с 16.10.2006
Offline
134
mfl
#4

Попробуйте делать проверку 'REQUEST_URI'

if($_SERVER['REQUEST_URI'] == '/') require_once (Root_Dir.'system/main.php');
else require_once (Root_Dir.'system/404.php');

mfl добавил 14.05.2010 в 17:46

К стати, в таких случаях лучше использовать include, а не require. Не будут загружаться ненужные файлы

Антон Лавеев
На сайте с 31.10.2005
Offline
425
#5
chemax:
только при переходе на http://site.ru/ или http://site.ru открывалась главная страница

Это делается гораздо проще. Просто с помощью .htaccess

☠️☠️☠️
ewg777
На сайте с 04.06.2007
Offline
225
#6
в таких случаях лучше использовать include, а не require. Не будут загружаться ненужные файлы

Подтвердить сможете?

mfl
На сайте с 16.10.2006
Offline
134
mfl
#7
Подтвердить сможете?

Могу ссылаться на мануал.

require вставляет код на этапе компиляции, include только при вызове.

RO
На сайте с 13.07.2009
Offline
88
#8

мне глаза изменяют или вы действительно модреврайт лепите к ероррдокементу О_О

skAmZ
На сайте с 04.09.2009
Offline
122
#9
chemax:
Все нормально, но почему при запросе вида site.ru/?do=asdasdasdas подключается main.php ?
При запросе вида site.ru/index.php?do=asdasdasdas подключается 404.php .

А что удивительного то? У вас видимо параметр "do" информативный для скрипта, т.о. на основе него выбирается выгружаемая страница, при запросе вида "http://site.ru/?do=asdasdasdas", у вас срабатывает правило "RewriteRule ^$ /index.php?do=main", а при обращении к "http://site.ru/index.php?do=asdasdasdas" оно не срабатывает, т.к. URL у вас не "", а "index.php". 404 ни какого отношения не имеет к htaccess, это уже ваша CMS выдает.

mfl
На сайте с 16.10.2006
Offline
134
mfl
#10
ewg777:
Подтвердить сможете?

Признаю, был не прав. Только что сделал тестирование, действительно, разницы нет, как оказалось require подключает файл только при выполнении условия.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий