Форум сетевых администраторов
Показаны 15 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- использование категорий в качестве переменных (http://netadmin.ws/forum/showthread.php?threadid=8677)


Помещено MUR2iK 07-05-2004 в 18:02:

использование категорий в качестве переменных

пришла в голову мысль создать скрипт, который преобразует название категорий сервера в переменные. может я некорректно выразился, но имею ввиду следующее:

я хочу зайти в раздел «новости» на сайте www.***.com, нажимаю на соответствующую ссылку и адрес у меня соответственно меняеться на www.***.com/news, причем каталога «news» физически на сервере не существует.

я пытался делать такую вещь:

прописывал в .htaccess на ошибку 404 (файл не найден) файл index.php, в которм написал:


PHP:


<?

$req_uri 
= $_SERVER['REQUEST_URI'];
$dirname = explode("/", $req_uri);

if (!isset(
$dirname[1]) or $dirname[1] == "") {

  include 
"./main.html"; // в файле main.html находиться то, что будет показываться при заходе на www.***.com

} else {

  if (
$dirname[1] == "news"){
    echo 
"THIS IS NEWS DIVISION"; // то, что будет отображаться если заходить в раздел «новости»
  
} else {
    include 
"404.html"; // если страницы не существует
  
}
}
?>



тоесть я пересматривал содержимое $_SERVER['REQUEST_URI'] и если оно то, что мне нужно — включал соответствующий файл.

но не всё так просто. вроде бы всё логично, но не работает.

может кто нибудь знает как справиться с этой проблемой? если у кого-то есть другой способ, очень хотел бы его увидеть.

__________________

New Evolution


Помещено GenUS 07-05-2004 в 18:17:

Не надо извращаться с ErrorDocument 404 ...
Не лучше-ли юзать Rewrite Engine? ... намного эстетичней будет ... и роботы не будут обламываться при индексации страниц ...

__________________
.


Помещено MUR2iK 07-05-2004 в 18:24:

GenUS
можно пояснить что есть «Rewrite Engine» и с чем его едять?

__________________

New Evolution


Помещено Vanish 07-05-2004 в 18:28:

quote:
и роботы не будут обламываться при индексации страниц ...

а откуда сведенья что они обламываются?

__________________
No pity, no mercy, no regret.


Помещено MUR2iK 07-05-2004 в 18:42:

нашел, что нужно сделать:

PHP:


if ($dirname[1] == "news"){ 
    
header("HTTP/1.0 200 Ok"); // посылаем заголовок, что то что у нас есть, это вообще, собственно и есть нужная страница
    
echo "THIS IS NEWS DIVISION"; // то, что будет отображаться если заходить в раздел «новости» 
  
}

__________________

New Evolution


Помещено GenUS 07-05-2004 в 19:07:

Что-то вроде этого:
code:

RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9_]*).htm$ /index.php?data=$1

после этой обработки имя виртуальной страницы передается скрипту в переменную $data ...
Пример:
Пользователь набирает: http://coolsite.ru/news_page1.htm
Скрипту передается: $data = "news_page1"
Ну и затем эту строку обрабатываешь, разделяешь на составляющие (раздел, страница, пр.) ...

__________________
.


Помещено MUR2iK 07-05-2004 в 19:17:

GenUS
этот код надо в index.php или в .htaccess прописать?

MUR2iK добавил 07-05-2004 в 19:24:51:
GenUS
ага, прописал в .htaccess всё работает чётко. а есть у этого способа минусы? например мой метод наверняка хорошенько грузит сервер

вот к примеру:

при вложености катологов:
www.***.com/news/may
у меня
$dirname[1] = news
$dirname[2] = may

тоесть легко создавать эмитацию вложености. как поступить с Rewrite Engine?

к тому же..
побаловался я на сервере и вот, что он мне написал:
«Error description:
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary».

тоесть видимо стоит число ограничений, поэтому такой способ не всем подходит..

__________________

New Evolution


Помещено GenUS 07-05-2004 в 19:48:

MUR2iK
Смотря как пользоваться ... вот ты что-то кажется не так сделал, вот у тя RE и стал грузить сервер, хотя у мня этот метод как часы работает ...
В том примере, который я дал разделитель между категориями переменных должен быть значком "_", слэши он не обрабатывает, хотя можно научить и этомы, подправив RE ...

__________________
.


Помещено MUR2iK 07-05-2004 в 20:19:

GenUS
понятно. ну я во избежании глюков и перегрузок тогда буду использовать свой метод. кстати, можно посмотреть сайт, где ты используещь свою систему

__________________

New Evolution


Помещено GenUS 07-05-2004 в 20:33:

MUR2iK
К сожалению он находится только в домашней сетке ...

__________________
.


Помещено rio 08-05-2004 в 09:29:

Ну это обыкновенный ЧПУ, вот вам ссылки по теме :
http://spectator.ru/technology/php/user_friendly_urls

__________________
Ковчег построили дилетанты, а профессионаллы построили "Титаник" - не бойтесь спрашивать то , чего вы не знаете , а так же делать то - чего не умеете !


Помещено MUR2iK 08-05-2004 в 23:10:

rio
спасибо за ссылочку, очень позновательно было почитать!

__________________

New Evolution


Помещено rio 10-05-2004 в 10:05:

Всегда пожалуйста

__________________
Ковчег построили дилетанты, а профессионаллы построили "Титаник" - не бойтесь спрашивать то , чего вы не знаете , а так же делать то - чего не умеете !


Помещено whisk 11-05-2004 в 00:10:

MUR2iK
Кажется, ошибка у тебя заключается в бесконечном редиректе. Т.е. например, test.html подходит под паттерн .*, заменяется на index.php, рерайт делается заново. Далее index.php опять подходит под .*, и все зацикливается. (это можно обойти, прописав рерайт в главном файле конфигурации - тогда рерайт делается один раз).
Кстати, метод обработкой урлов апачем будет быстрее - скомпилированный код на С все же быстрее PHP.


Помещено MUR2iK 24-07-2004 в 13:19:

в конце концов стал использовать FilesMatch

столкнулся с такой проблемой:
при отправки из формы на реално существующую папку все переменные сохраняються, если же посылать содержимое формы на виртуальный каталог — всё убиваеться.

.htaccess:
_____________________________

Action throw /blah/index.php

<FilesMatch "^([^.]+)$">
ForceType throw
</FilesMatch>

<FilesMatch index.php>
ForceType application/x-httpd-php
</FilesMatch>
_____________________________


если учесть что папка /news/ не сущесвует реально на сервере www.***.com, то послать содержимое формы на адрес www.***com/news/?login невозможно.

есть ли способ обойти такую неприятность или придёться во всех формах писать абослютный адрес, типа www.***.com/?login независимо от расположения на сайте?

__________________

New Evolution


Формат времени GMT. Текущее время 11:39.
Показаны 15 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.