Обучение/Помощь новичкам | Правила в htaccess
Тема закрыта by
SNEG
Объясните что делают эти правила, несколько дней в гугле ищу не могу понять особенно (.*) и что это означает $1 в конце index.php?f=
________
посл. ред. 25.12.2023 в 13:24; всего 4 раз(а); by SNEG
php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]________
посл. ред. 25.12.2023 в 13:24; всего 4 раз(а); by SNEG
Подробное описание правила:
- `RewriteCond %{REQUEST_FILENAME} !-f`: Это условие проверяет, не соответствует ли URL-адрес существующему файлу.
- `RewriteCond %{REQUEST_FILENAME} !-d`: Это условие проверяет, не соответствует ли URL-адрес существующей директории.
- `RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]`: Это именно правило, которое выполняет перенаправление. Оно сопоставляет любой URL-адрес (`^(.*)$`) и перенаправляет его на `index.php`, добавляя исходный URL-адрес в качестве параметра запроса `f`. Флаги `[L,QSA]` означают, что это последнее правило для обработки для этого запроса (`L`) и что все существующие параметры запроса должны быть добавлены к новому (`QSA`).
Таким образом, в целом, это правило используется для маршрутизации всех запросов на `index.php`, передачи URL-адреса в качестве параметра.
Для того чтобы это понять, придется осилить регулярки
https://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
https://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
Объясните что делают эти правила, несколько дней в гугле ищу не могу понять особенно (.*) и что это означает $1 в конце index.php?f=
php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]^ - начало стороки (начиная с слеша, bym.guru/user/1
(.*) - всё что с начала и до конца поместить в переменную(массив) user/1
$ - ограничитель означающий конец строки.
- $1 и есть та переменная, в которой помещаются данные, их может быть очень много $2,$3...
Советую почитать про регулярные выражения и php роутеры, как они работают и для чего (самая простая реализация). После заняться следующими этапами в изучении MVC
________
посл. ред. 25.12.2023 в 14:17; всего 1 раз(а); by _(Ulty)_
Объясните что делают эти правила, несколько дней в гугле ищу не могу понять особенно (.*) и что это означает $1 в конце index.php?f=
php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]RewriteCond %{REQUEST_FILENAME} !-f: Це перевіряє, чи не існує файл зі шляхом, який був запитаний. Умова буде виконуватися, якщо файл не існує.
RewriteCond %{REQUEST_FILENAME} !-d: Це перевіряє, чи не існує каталог зі шляхом, який був запитаний. Умова буде виконуватися, якщо каталог не існує.
RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]: Це переписує URL так, що всі запити направляються на файл index.php, а параметр f отримує значення, яке представляє собою весь шлях після домену.
^(.*)$: Це регулярний вираз, який збігається з усім шляхом після домену.
index.php?f=$1: Це новий шлях, на який буде перенаправлено запит. $1 - це частина URL, яку ми вилучили за допомогою (.*?), і вона підставляється в параметр f у новому URL.
[L,QSA]: Це флаги правила. L означає "остановити обробку правил", а QSA додає до нового URL будь-які існуючі параметри запиту.
Ці правила призначені для направлення всіх запитів на сервері (якщо не існує відповідного файлу або каталогу) на скрипт index.php, де весь шлях після домену буде доступний у змінній $_GET['f'].
Ці правила є частиною конфігурації веб-сервера Apache для обробки запитів URL.
RewriteCond %{REQUEST_FILENAME} !-f: Це перевіряє, чи не існує файл зі шляхом, який був запитаний. Умова буде виконуватися, якщо файл не існує.
RewriteCond %{REQUEST_FILENAME} !-d: Це перевіряє, чи не існує каталог зі шляхом, який був запитаний. Умова буде виконуватися, якщо каталог не існує.
RewriteRule ^(.*)$ index.php?f=$1 [L,QSA]: Це переписує URL так, що всі запити направляються на файл index.php, а параметр f отримує значення, яке представляє собою весь шлях після домену.
^(.*)$: Це регулярний вираз, який збігається з усім шляхом після домену.
index.php?f=$1: Це новий шлях, на який буде перенаправлено запит. $1 - це частина URL, яку ми вилучили за допомогою (.*?), і вона підставляється в параметр f у новому URL.
[L,QSA]: Це флаги правила. L означає "остановити обробку правил", а QSA додає до нового URL будь-які існуючі параметри запиту.
Ці правила призначені для направлення всіх запитів на сервері (якщо не існує відповідного файлу або каталогу) на скрипт index.php, де весь шлях після домену буде доступний у змінній $_GET['f'].
Исправьть если что-то не так , и в чём прикол так делать? Что этот адрес даст index.php?f=ujjg/haha.php ?
________
посл. ред. 25.12.2023 в 16:40; всего 3 раз(а); by SNEG
С выше с всех разъяснений понял , если файл не существует или каталог, запрос будет перенесен на index.php?f= , если , я перехожу по адресу test.ru/ujjg/haha.php и такого файла нет, то url будет построен как index.php?f=ujjg/haha.php
Исправьть если что-то не так , и в чём прикол так делать? Что этот адрес даст index.php?f=ujjg/haha.php ?
В том что в зависимости от адреса выводится разный контент )
Для чего это делается ?
________
посл. ред. 25.12.2023 в 17:54; всего 1 раз(а); by SNEG