Jump to content

Recommended Posts

Добрый вечер! Столкнулся с проблемой обработки URL-адресов и не понимаю чего бы придумать. Суть проблемы:

Есть адрес вида:

 

site.ru/includes/administrator/admin.php

 

Как сделать, чтобы при вводе такого URL:

 

site.ru/admin/

 

Открывался файл admin.php, т.е. укоротить URL. И да - таких адресов будет около 50. Куда их помещать (БД/Файл) и как обрабатывать такие запросы?

Link to post
Share on other sites

В .htaccess

RewriteRule ^site.ru/admin/$ /site.ru/includes/administrator/admin.php [L]

 

Не хочу нагружать .htaccess таким способом. А если у меня таких адресов около 50, т.е. различных по типу? К примеру, посты я могу выводить одним обработчиком "post.php?параметр=значение...",  а вот для всех остальных шаблонов прописывать в каком-нибудь PHP-обработчике?

Link to post
Share on other sites

Не хочу нагружать .htaccess таким способом. А если у меня таких адресов около 50, т.е. различных по типу? К примеру, посты я могу выводить одним обработчиком "post.php?параметр=значение...",  а вот для всех остальных шаблонов прописывать в каком-нибудь PHP-обработчике?

 

Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией?

Link to post
Share on other sites

Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией?

 

То, что плохо нагружать htaccess - я не слышал. Но 50 строк в .htaccess меня почему-то напрягают (почему? не знаю, обычно в htaccess 5-10 строк должно быть :D). Я прочитал о PHP-обработчике URLов и у него есть некоторые плюсы. В htaccess прописывается такая штука:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?furl=$1 [L,QSA]
</IfModule>

Все адреса летят в index.php с GET-параметром. index.php обрабатывает этот URL и выплевывает страницу.

 

К тому же легко так проверить 404 ошибку, как мне кажется. Если физического файла на сервере нет, выдает 404, если есть - выдаем файл. В это же время htaccess практически не загружен - всё будет решать и находить index.php. Мне кажется, куда эстетичней сделать через такой обработчик нежели Apache.

Link to post
Share on other sites
  • VIP

Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией?

Вы о простом редиректе ,а у тс похоже  самописный двиг и ему нужно роутер сделать с нуля на php,а не настроить переадресацию в готовом двиге (ибо страница переехала)

Link to post
Share on other sites

Если действительно это плохо, поделитесь информацией?

А что хорошего когда апач перебирает все ваши условия?

ТС. Используйте регулярные выражения в .htaccess и будет вам счастье

Link to post
Share on other sites

А что хорошего когда апач перебирает все ваши условия?

ТС. Используйте регулярные выражения в .htaccess и будет вам счастье

 

А PHP-код апач не выполняет? Тут еще можно поспорить что будет быстрее работать?

Link to post
Share on other sites

Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией?

 

Вот нашёл такой способ:

class Router {
    private $_route = array(); //Переменная хранит маршруты, и файлы, которые будут открываться при определеном маршруте
 
    /**
     * Метод для установки маршрута, и файла который будет открываться при заданом маршруте
     * @param <string> $dir - маршрут
     * @param <string> $file - адрес файла
     */
    public function setRoute($dir, $file) {
        $this->_route[trim($dir, "/")] = $file;
    }
 
    /**
     * Метод смотрит текущий адрес, и сверяет его с установленными маршрутами,
     * если для открытого адреса установлен маршрут, то открываем страницу
     * @return <boolean>
     */
    public function route() {
        if (!isset($_SERVER["PATH_INFO"])) { //Если открыта главная страница
            include_once "/template/main.php"; //Открываем файл главной страницы
        } elseif (isset($this->_route[trim($_SERVER["PATH_INFO"], "/")])) { //Если маршрут задан
            include_once $this->_route[trim($_SERVER["PATH_INFO"], "/")]; //Открываем файл, для которого установлен маршрут
        }
        else return false; //Если маршрут не задан

        return true;
    }
}
 
$route = new Router;
$route->setRoute("/admin/", "/system/admin.php"); //Устанавливаем маршрут и файл который будет открываться при этом маршруте
$route->setRoute("/lk/", "/system/lk.php");

Все маршруты перенаправляются в файл INDEX.PHP, где обрабатываются все URL-адреса. HTACCESS выглядит так:

RewriteEngine on
 
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
 
RewriteRule ^(.*)$ index.php/$1

Так можно добавлять много виртуальных адресов без завала HTACCESS

Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...