Sign in to follow this  
Followers 0
applepeace

Обработка URL-адресов

10 posts in this topic

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

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

 

site.ru/includes/administrator/admin.php

 

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

 

site.ru/admin/

 

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

Share this post


Link to post
Share on other sites

В .htaccess

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

Share this post


Link to post
Share on other sites

В .htaccess

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


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.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.