Htaccess если файл существует
Хоть тема htaccess - это не начальный уровень изучения, но мы потихоньку начинаем углубляться и htaccess - это неотъемлемая часть сайта!
Подробно о файле htaccess: сделать, пример, теория.
Как сделать файл htaccess
Если не получается создать файл .htaccess, то просто скачайте наш файл "htaccess" и отредактируйте так, как вам нужно.
Создание файла htaccess с изменением разрешения.
Не всегда срабатывает.
Самое простое, как можно создать файл htaccess – это - заходим в ту папку. В которой нам нужно, чтобы находился файл htaccess – нажимаем ПКМ - создать – текстовый документ.
Создание файла htaccess с изменением разрешения.
Вот на нижнем скрине мы видим, что наш новый текстовой документ создан. Теперь нам нужно его переименовать в .htaccess. Точка перед словом htaccess – это не ошибка – он так и выглядит!
Создание файла htaccess с изменением разрешения.
Хм… только я хотел его переименовать, а он мне выдает:
Создание файла htaccess с изменением разрешения.
Да… в windows 7 это проходило без проблем…
Ну, что же, мы пойдем другим путем!
Если у вас получилось так же, то делаем далее:
Открываем созданный файл в блокноте, либо просто открываем текстовый блокнот и в нём указываем сохранение нашего файла htaccess в нужную директорию.
Имя файла - .htaccess
Тип файла – все файлы.
Кодировку выбираем - utf-8
Создание файла htaccess с изменением разрешения.
Всё – наш файл .htaccess – создан.
Если у вас не получается создать файл htaccess, то предлагаю вам скачать мой файл htaccess. Вы всегда сможете его открыть в любом редакторе кода
Почти на каждую строчку надо делать отдельную страницу, поэтому: еще больше о htaccess
AddHandler fcgid-script .php .html .htm
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
Кодировка, которая прописывается в файле htaccess
Выполнение php на html
При ошибке 404 переадресация на 404.html
RewriteEngine on|off - Включает или выключает работу механизма преобразования
Условие, если в строке "www.dwweb.ru" выполнять ниже идущее условие
Переадресация с www на без www
Все остальное, если дошло до сюда, то будет перенаправляться на index.html - это называется единая точка входа
Добрый день
У меня сейчас стоит вот такая интересная строчка: RewriteRule ^(.*)$ index.php?htaccess&l=$1 [L,QSA] Но сразу видно что все через один файл и это дурная привычка..
Хотел бы начать разбивать все но сразу все изменить я не готов.
Можно ли ту строчку как-то "совместить" с RewriteRule ^(([^/]+/)*[^.]+)$ $1.php [L,QSA] если нужный файл действительно есть и находиться в этой папке или в папке, допустим, code?
- Вопрос задан более трёх лет назад
- 541 просмотр
есть мутная архитектура: все проходит через индех.пхп. Но хочу от этого избавиться и чтобы некоторые "компоненты" брались с папки sys. Пример.
Открывает пользователь /chat и если в папке sys нету файла chat.php то направлять в index.php?l=chat
xmoonlight: нужно как-то так все сделать:
RewriteCond sys/% !-f
RewriteRule ^(.*)$ sys/$1.php [L,QSA]
RewriteRule ^(.*)$ index.php?l=$1 [L,QSA]
utyfua: ну обычно делается так: в .htaccess прописываются только обходы для статики и запреты. Иногда - установка переменных для частных случаев (SetEnv).
Всё что осталось - пропускается через скрипт.
Точка входа - единый скрипт-файл называется роутером. (как ж/д "стрелка")
Там в зависимости от запроса (GET/POST/HEADERs и т.д.) происходит перенаправление на нужное приложение.
Вот в этом файле - Вы и прописываете весь роутинг.
xmoonlight: а чем htaccess хуже? И я так увлекся с "роутером" что у меня там и подключение к бд и куча другого хлама.. прошу навести на верный путь
xmoonlight: все так печально что вложенностей много и хотелось бы защититься тем, чтобы в роле url роутера выступал htaccess.. Так меньше шансов накосячить..
utyfua: вот именно, что БОЛЬШЕ шансов накосячить именно в .htaccess, иначе бы Вы не задали этого вопроса)
Банально из-за того, что инструментов в PHP в разы больше для роутинга, чем в .htaccess: там и сравнения строк, regex, ЛЮБЫЕ массивы и т.д.
xmoonlight: так я опять боюсь повторить свою ошибку в роутер загнать прием оплаты, подключение к бд, авторизацию, чего там только нету.. И в htaccess нужно продвигаться и узнавать что-то новое. К тому же если будет такой универсальный подход но особо его уже пинать будет тупо незачем.
xmoonlight: есть то относительно не очень универсальный способ - путь к каждому файлу в htaccess прописывать вручную, но хотелось бы универсальности)
utyfua: единственный универсальный путь - сделать это через один php-файл. Так делаю не только я, но и все крупные фреймворки и CMS-системы, т.к. это единственный разумный путь решения проблемы маршрутизации. Почему Вы не желаете идти по нему?
xmoonlight: так там много чего может быть.. но хотелось бы универсальности чтобы забыть про этот файл..
utyfua: достаточно одной строки: если НЕ существует - выполнить index.
Если нужно брать путь из GET-запроса - нужны примеры.
xmoonlight: так у меня коды планируют храниться в новой папке sys но как, если не существует, выйти из контекста папки sys?
utyfua: ну так создайте 2 htaccess: в папке sys и в корневой (www). и при запросе в папке sys, если нет файла - делайте 301 редирект на index.
utyfua: если запрос к папке будет в GET параметре: /sys/folder/file.php - то sys в .htaccess не нужен.
Если как-то иначе - то нужны примеры.
xmoonlight: я взглядя на код в ответе не особо поверил что он сработает.. Непонятные проверки какие-то.. Не сработало .. Буду вот так делать:
RewriteRule ^chat/$ sys/chat [QSA]
utyfua: может еще какие-другие строки есть в .htaccess ?
Как я делал: я создал один файл .htaccess с этим содержимым в корне www(docroot), файл index.php и папку sys. Затем положил в папку sys файл auth.php
При вызове host.com/auth - открывается auth.php, иначе - index.php из корня www(docroot)
При добавлении других файлов в папку sys - также при их наличии - их "подцепляет" автоматически, иначе - index.php из корня www(docroot).
RewriteEngine on
RewriteRule ^auth$ sys/auth.php? [L,QSA]
RewriteRule ^v[0-9.]+\.js$ /index.php?js [L,QSA]
RewriteRule ^casino.v[0-9.]+\.js$ /index.php?casino [L,QSA]
RewriteRule ^(([^/]+/)*[^.]+)$ index.php?htaccess&l=$1 [L,QSA]
Order Allow,Deny
Allow from all
Deny from 212.87.165.165 85.93.54.82 77.236.85.168
/ximage/1600/1600/upload/models/07871915a8107172b3b5dc15a6574ad3.jpg
он перекидывает запрос на ximg.php.
А ximg.php делает ресайз изображения 1600 на 1600 (разумеется, цифры могут быть любыми, поддерживаемыми скриптом)
Сам скрипт в зависимости от параметров делает изображению ресайз или кроп.
Но проблема вот в чем.
Он всегда проверяет кеш, и если он есть, то отдает его средствами PHP!
header('Content-type: ' . $mime);
if ( !is_file($_SERVER['DOCUMENT_ROOT'] . $output) ) $file = resize($input, $_SERVER['DOCUMENT_ROOT'] . $output, $h, $w, $ext);
> else readfile($_SERVER['DOCUMENT_ROOT'] . $output);
>
Что очень сильно увеличивает нагрузку на сервер.
Можно ли проверку на существования файла повесить на .htaccess и сделать так, чтобы он не обращался к скрипту, если файл есть на сервере.
Альтернативным решением будет заголовок, заставляющий кешировать изображение на 2 дня с момента его создания. Но хотелось бы именно средствами Apache (mod_rew) принимать решение о выдаче кешированной картинки.
Спасибо, что дочитали до этого места =)
Для интересующихся привожу сам скрипт (надеюсь кому-то будет полезен, но учтите, что у него нет защиты от перебора высоты):
if (($ext == ".jpg") || ($ext == ".jpg") || ($ext == ".jpg") || ($ext ==".jpg")) if (($ext == ".jpg") || ($ext == ".jpg")) $source = imagecreatefromjpeg($input) or die('Cannot load original JPEG');
>
if ($ext ==".jpg") $source = imagecreatefromgif($input) or die('Cannot load original GIF');
>
if ($ext == ".jpg") $source = imagecreatefrompng($input) or die('Cannot load original PNG');
>
$target = imagecreatetruecolor($newx, $newy);
imagefill($target, 0,0, '0');
imagecopyresampled($target, $source, 0,0, 0,0, $newx, $newy, $size[0], $size[1] );
if (($ext == ".jpg") || ($ext == ".jpg")) imagejpeg($target, $output, 100);
if ($ext ==".jpg") imagegif($target, $output, 85);
if ($ext == ".jpg") imagepng($target, $output, 0);
imagedestroy($target);
imagedestroy($source);
> else copy($input, $output);
>
>
function p($a) echo '';
print_r($a);
echo '';
>
?>
Репутация: 46
Всего: 140
Вот таким кодом проверяю на существование файла и если его нет перенаправляю на скрипт
.htaccess
Цитата |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^css/(.*)$ compress.php [L,QSA] |
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Добавлено @ 13:30
мой вариант
Репутация: 20
Всего: 69
MoLeX, это ты про мой вариант?
Кстати с почином тебя статей на хабре.
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Репутация: 20
Всего: 69
ну как я уже сказал у меня твой первый вариант полностью работоспособен
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Цитата |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^js/(.*)$ compress.php [L,QSA] RewriteRule ^/css/(.*)$ compress.php [L,QSA] |
Репутация: 20
Всего: 69
Код |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^css/(.*)$ compress.php [L,QSA] |
у меня вот так работает
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Цитата |
RewriteEngine On RewriteCond % !-f RewriteRule ^js/(.*)$ compress.php [L,QSA] |
Добавлено через 20 секунд
Цитата(krundetz @ 30.1.2012, 12:54 ) |
Думаю тут у тебя ещё есть проблема правда немного в другом. |
Репутация: 96
Всего: 386
RewriteCond работает с ОДНИМ RewriteRule, расположенным сразу под ним. "Отбивка" куска правил пустой строкой - не работает
Sorry, не досмотрел до конца топика, уже все таки ясно
Добавлено @ 14:17
Можно указывать флаг Chain [C], если нужно склеить правила
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 96
Всего: 386
Цитата(krundetz @ 30.1.2012, 15:30 ) |
Если злоумышленник найдет способ закачать в эту директорию файл php он получит возможность его выполнить. |
Чем в этом случае злоумышленник будет отличатся от честного налогоплательщика, который и хотел разместить там php код?
Файл от загрузки в непредусмотренное для исполнениян место защищается, обычно, несколько другими средствами.
Репутация: 20
Всего: 69
Цитата(ksnk @ 30.1.2012, 15:57 ) |
Файл от загрузки в непредусмотренное для исполнениян место защищается, обычно, несколько другими средствами. |
ну уровня защиты должно быть хотя бы 2:
1. Невозможность загрузить файл на сервер (как показывает практика, найти такую дырку в скриптах реально, вроде бы уже закрывали а она опять появляется и на том же самом месте, как кто специально делает, хотя конечно виной всему раздолбайство)
2. Так как от первого 100% страховки нет, то хорошо бы подстраховаться что бы файлы не имеющие отношения к движку сайта запуститься не могли.
3. Так же помещение скрипта в директорию которая для скриптов не предназначена может быть просто не замечено владельцем сайта, так как глаз замыливается и рассуждение будет примерно таким "если я не помещаю туда файлы то и искать там не буду".
Выходом из ситуации может быть модификация .htaccess файла следующим образом:
Код |
RewriteEngine On RewriteCond % ^(.*)\.css$ RewriteCond % !-f RewriteRule ^(.*)\.css$ compress.php [L,QSA] |
то есть условие будет отрабатываться только для файлов у которых расширение css, и если не забыть запретить выполнение таких файлов интерпретатором php, то посторонний код на сервере запустить не удастся
Добавлено @ 17:07
Цитата(ksnk @ 30.1.2012, 15:57 ) |
Чем в этом случае злоумышленник будет отличатся от честного налогоплательщика, который и хотел разместить там php код? |
Тем что честный налогоплательщик разместит там нужный ему код, а злоумышленник код который направлен на взлом.
З.Ы. Возможно в приведенном коде ошибка надо проверить пример из памяти
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 96
Всего: 386
Цитата(krundetz @ 30.1.2012, 17:05 ) |
то есть условие будет отрабатываться только для файлов у которых расширение css |
А если юзер разместил там php файл специально? Какая нибудь LESS/SASS реализация или еще какой финт с css на лету?
- Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
- Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
- Действия модераторов можно обсудить здесь
- Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
- Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, [email protected] , skyboy, SamDark, MoLeX, awers.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
[ Время генерации скрипта: 0.1831 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Репутация: 46
Всего: 140
Вот таким кодом проверяю на существование файла и если его нет перенаправляю на скрипт
.htaccess
Цитата |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^css/(.*)$ compress.php [L,QSA] |
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Добавлено @ 13:30
мой вариант
Репутация: 20
Всего: 69
MoLeX, это ты про мой вариант?
Кстати с почином тебя статей на хабре.
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Репутация: 20
Всего: 69
ну как я уже сказал у меня твой первый вариант полностью работоспособен
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Цитата |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^js/(.*)$ compress.php [L,QSA] RewriteRule ^/css/(.*)$ compress.php [L,QSA] |
Репутация: 20
Всего: 69
Код |
RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^css/(.*)$ compress.php [L,QSA] |
у меня вот так работает
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 46
Всего: 140
Цитата |
RewriteEngine On RewriteCond % !-f RewriteRule ^js/(.*)$ compress.php [L,QSA] |
Добавлено через 20 секунд
Цитата(krundetz @ 30.1.2012, 12:54 ) |
Думаю тут у тебя ещё есть проблема правда немного в другом. |
Репутация: 96
Всего: 386
RewriteCond работает с ОДНИМ RewriteRule, расположенным сразу под ним. "Отбивка" куска правил пустой строкой - не работает
Sorry, не досмотрел до конца топика, уже все таки ясно
Добавлено @ 14:17
Можно указывать флаг Chain [C], если нужно склеить правила
Репутация: 20
Всего: 69
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 96
Всего: 386
Цитата(krundetz @ 30.1.2012, 15:30 ) |
Если злоумышленник найдет способ закачать в эту директорию файл php он получит возможность его выполнить. |
Чем в этом случае злоумышленник будет отличатся от честного налогоплательщика, который и хотел разместить там php код?
Файл от загрузки в непредусмотренное для исполнениян место защищается, обычно, несколько другими средствами.
Репутация: 20
Всего: 69
Цитата(ksnk @ 30.1.2012, 15:57 ) |
Файл от загрузки в непредусмотренное для исполнениян место защищается, обычно, несколько другими средствами. |
ну уровня защиты должно быть хотя бы 2:
1. Невозможность загрузить файл на сервер (как показывает практика, найти такую дырку в скриптах реально, вроде бы уже закрывали а она опять появляется и на том же самом месте, как кто специально делает, хотя конечно виной всему раздолбайство)
2. Так как от первого 100% страховки нет, то хорошо бы подстраховаться что бы файлы не имеющие отношения к движку сайта запуститься не могли.
3. Так же помещение скрипта в директорию которая для скриптов не предназначена может быть просто не замечено владельцем сайта, так как глаз замыливается и рассуждение будет примерно таким "если я не помещаю туда файлы то и искать там не буду".
Выходом из ситуации может быть модификация .htaccess файла следующим образом:
Код |
RewriteEngine On RewriteCond % ^(.*)\.css$ RewriteCond % !-f RewriteRule ^(.*)\.css$ compress.php [L,QSA] |
то есть условие будет отрабатываться только для файлов у которых расширение css, и если не забыть запретить выполнение таких файлов интерпретатором php, то посторонний код на сервере запустить не удастся
Добавлено @ 17:07
Цитата(ksnk @ 30.1.2012, 15:57 ) |
Чем в этом случае злоумышленник будет отличатся от честного налогоплательщика, который и хотел разместить там php код? |
Тем что честный налогоплательщик разместит там нужный ему код, а злоумышленник код который направлен на взлом.
З.Ы. Возможно в приведенном коде ошибка надо проверить пример из памяти
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
Репутация: 96
Всего: 386
Цитата(krundetz @ 30.1.2012, 17:05 ) |
то есть условие будет отрабатываться только для файлов у которых расширение css |
А если юзер разместил там php файл специально? Какая нибудь LESS/SASS реализация или еще какой финт с css на лету?
- Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
- Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
- Действия модераторов можно обсудить здесь
- Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
- Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, [email protected] , skyboy, SamDark, MoLeX, awers.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
[ Время генерации скрипта: 0.1651 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Что такое htaccess
Определение что такое htaccess:
.htaccess (/'eɪtʃtiːæk.sɛs/ от англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов.
Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
На вашем сайте(сервере) есть главный файл конфигурации, все, что так или иначе выполняется на вашем сайте зависит от этого файла, а вот файл htaccess - это - можно сравнить с дополнительными настройками системы.
Иногда к главному конфигурационному файлу доступа нет и его невозможно изменить, если у вас нет соответствующего доступа.
В этом случае - можно его изменить, только обратившись в техническую поддержку!
Самый простой пример использования htaccess
Самый простой пример, как работает htaccess!? Для одной из тем, мы делали доступ в файлам, вот из этой темы и приведем пару примеров!
В одну папку поместим несколько файлов - для которых пропишем свои правила :
Которые нам говорят, что в данном случае, все файлы, которые имеют разрешение ".cfg" и ".dat" - будут недоступны для просмотра.
В папку помещаем файл с выше приведенной записью
Самый простой пример использования htaccess
Далее помещаем файл "txt.txt", который не прписан в данном файле - смотрим:
В эту же папку поместим файл с разрешением приписанным в файле htaccess "cfg.cfg":
Вывод - 403 - "Доступ запрещен"!
Как мы видим, что вместо нашей страницы нам выводится совсем другая информация. Поскольку доступ ограничен срабатывает переадресация на файл 403. Хотя если вы успеете посмотреть на адрес, то он остался прежним..
И если посмотреть на реальный файл размещения данного файла. то он будет выглядеть так:
Где находится файл htaccess
Вы можете располагать данный файл, как в корневой папке, и данный файл будет распространять свое влияние на весь сайт, но если вы хотите. отменить действие файла htaccess в какой-то папке, то просто создаем новый файл htaccess и вставляем его в ту папку, в которой хотим изменить правила.
Читайте также: