applepeace 11 Posted September 20, 2015 Report Share Posted September 20, 2015 Добрый вечер! Столкнулся с проблемой обработки URL-адресов и не понимаю чего бы придумать. Суть проблемы: Есть адрес вида: site.ru/includes/administrator/admin.php Как сделать, чтобы при вводе такого URL: site.ru/admin/ Открывался файл admin.php, т.е. укоротить URL. И да - таких адресов будет около 50. Куда их помещать (БД/Файл) и как обрабатывать такие запросы? Link to post Share on other sites
tcher 1 Posted September 20, 2015 Report Share Posted September 20, 2015 В .htaccess RewriteRule ^site.ru/admin/$ /site.ru/includes/administrator/admin.php [L] Link to post Share on other sites
applepeace 11 Posted September 20, 2015 Author Report Share Posted September 20, 2015 В .htaccess RewriteRule ^site.ru/admin/$ /site.ru/includes/administrator/admin.php [L] Не хочу нагружать .htaccess таким способом. А если у меня таких адресов около 50, т.е. различных по типу? К примеру, посты я могу выводить одним обработчиком "post.php?параметр=значение...", а вот для всех остальных шаблонов прописывать в каком-нибудь PHP-обработчике? Link to post Share on other sites
tcher 1 Posted September 20, 2015 Report Share Posted September 20, 2015 Не хочу нагружать .htaccess таким способом. А если у меня таких адресов около 50, т.е. различных по типу? К примеру, посты я могу выводить одним обработчиком "post.php?параметр=значение...", а вот для всех остальных шаблонов прописывать в каком-нибудь PHP-обработчике? Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией? Link to post Share on other sites
applepeace 11 Posted September 20, 2015 Author Report Share Posted September 20, 2015 Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией? То, что плохо нагружать htaccess - я не слышал. Но 50 строк в .htaccess меня почему-то напрягают (почему? не знаю, обычно в htaccess 5-10 строк должно быть ). Я прочитал о 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 serjin 1061 Posted September 20, 2015 VIP Report Share Posted September 20, 2015 Ну я не слышал о проблемах с нагрузкой htaccess. Настраиваю таким способом себе, о других приемах даже не задумывался. Если действительно это плохо, поделитесь информацией? Вы о простом редиректе ,а у тс похоже самописный двиг и ему нужно роутер сделать с нуля на php,а не настроить переадресацию в готовом двиге (ибо страница переехала) Link to post Share on other sites
node.js 103 Posted September 20, 2015 Report Share Posted September 20, 2015 Если действительно это плохо, поделитесь информацией? А что хорошего когда апач перебирает все ваши условия? ТС. Используйте регулярные выражения в .htaccess и будет вам счастье Link to post Share on other sites
tcher 1 Posted September 21, 2015 Report Share Posted September 21, 2015 А что хорошего когда апач перебирает все ваши условия? ТС. Используйте регулярные выражения в .htaccess и будет вам счастье А PHP-код апач не выполняет? Тут еще можно поспорить что будет быстрее работать? Link to post Share on other sites
applepeace 11 Posted September 22, 2015 Author Report Share Posted September 22, 2015 Ну я не слышал о проблемах с нагрузкой 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
June 11 Posted September 27, 2015 Report Share Posted September 27, 2015 Можно не передавать путь явно. Вот недавно писала: Чпу в адресной строке из mysql Примеры того, как это работает: http://g09.ru Link to post Share on other sites
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now