0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
1 | |
Не пойму как работает RewriteCond и RewriteRule31.05.2018, 21:11. Показов 2066. Ответов 9
Метки нет (Все метки)
Вот код из htaccess
Код
AddDefaultCharset utf-8 DirectorySlash Off RewriteEngine On Options +SymLinksIfOwnerMatch RewriteBase / #строка запроса в браузере http://xerox.never.test/resources/qwerty RewriteCond %{SERVER_NAME} ^xerox\.never\.test$ RewriteCond %{THE_REQUEST} ^.*resources/qwerty.*$ #RewriteCond %{REQUEST_URI} ^.*resources/?.*$ #RewriteCond %{REQUEST_URI} ^.*/.*r+.*e+.*s+.*$ #RewriteCond %{REQUEST_URI} ^.*/.*re+.*s+.*$ RewriteCond %{REQUEST_URI} ^.{16,18}$ RewriteCond %{REQUEST_URI} ^.*/.*r+.*e+.*$ RewriteRule ^(.*)re?(.*)$ project/index.php [NC,L] #RewriteRule ^(.*)res?(.*)$ project/index.php [NC,L] #RewriteRule ^.*$ project/index.php [NC,L] #RewriteRule ^(.*)resources/?(.*)$ project/index.php [NC,L] #Срабатывает условие из RewriteRule строки и выполняется скрит project/index.php. Что сидит в REQUEST_URI. И какую строку обрабатывает RewriteRule ???
0
|
31.05.2018, 21:11 | |
Ответы с готовыми решениями:
9
RewriteCond влияет толко для один, следушчи RewriteRule. можно как-то превишать количество RewriteRule Не работает RewriteCond Не пойму, как работает. Не пойму как работает While |
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
|
|
31.05.2018, 21:18 | 2 |
/qwerty/qwerty RewriteRule получает строку без начального / т.е. qwerty/qwerty это если htaccess лежит в корне сайта.Как на самом деле работает mod_rewrite RewriteRule ^(.*)res?(.*)$ для совпадения шаблона в проверяемой строке должно быть re .В твоём запросе есть только rt вот поэтому и нет совпадения с шаблоном. https://regex101.com/r/aZE1Q9/1
0
|
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
31.05.2018, 21:29 [ТС] | 3 |
Извиняюсь. я чуток там ошибся.
строка запроса xerox.never.test/resources/qwerty выражение RewriteCond %{REQUEST_URI} ^.*/.*res+.*$ не срабатывает. выражение RewriteRule ^(.*)re?(.*)$ project/index.php [NC,L] работает выражение RewriteRule ^(.*)res?(.*)$ project/index.php [NC,L] не работает Если строка запроса xerox.never.test/qwerty/qwerty Выражение RewriteCond %{REQUEST_URI} ^.*/.*r+.*e+.*$ срабатывает. Выражение RewriteCond %{REQUEST_URI} ^.*/.*qwerty+.*$ не срабатывает. выражение RewriteRule ^(.*)re?(.*)$ project/index.php [NC,L] работает выражение RewriteRule ^(.*)res?(.*)$ project/index.php [NC,L] не работает Сижу методом тыка ставлю и ничего понять не могу. Уже голова кругом идет от этого
0
|
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
|
|
31.05.2018, 21:43 | 4 |
А сам файл htaccess в корне сайта или в папке /resources/.
И есть ли в htaccess другие правила.
0
|
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
31.05.2018, 21:56 [ТС] | 5 |
Вот структура снимок во вложении. .htaccess в корне сайта
Строка запроса xerox.never.test/resources/qwerty Из того что я понимаю. (только что перепроверил) в %{THE_REQUEST} есть ^.*resources/qwerty.*$ в %{REQUEST_URI} есть ^.{16,18}$ в %{REQUEST_URI} есть ^.*/.*r+.*e+.*$ в %{REQUEST_URI} нету ^.*/.*r+.*e+.*s+.*$ в %{REQUEST_URI} нету ^.*re.*$ RewriteRule ^(.*)re?(.*)$ project/index.php [NC,L] - Работает RewriteRule ^(.*)res?(.*)$ project/index.php [NC,L] - Не работает (Естественно предыдущие варианты в комент бросаю)
0
|
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
|
|
31.05.2018, 22:39 | 6 |
Подвох в том что mod_rewrite запускает обработку запроса снова и снова, до тех пор, пока он не перестанет меняться. И флаг [L] не может это остановить.
В той статье про работу mod_rewrite это подробно расписано: И вот там срабатывает второй RewriteRule и меняет запрос на xerox/index.php и обработка начинается заново с начала .htaccess Строка /xerox/index.php совпадает с шаблонами ^.{16,18}$ https://regex101.com/r/aZE1Q9/2^.*/.*r+.*e+.*$ https://regex101.com/r/aZE1Q9/3^(.*)re?(.*)$ https://regex101.com/r/aZE1Q9/4А вот с ^(.*)res?(.*)$ уже не совпадает https://regex101.com/r/aZE1Q9/5.Опиши подробнее задачу и тебе помогут составить список правил.
1
|
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
31.05.2018, 22:55 [ТС] | 7 |
В общем на хостинге все поддомены обрабатываются как и основной домен.
Задача такая. Запрос xerox.never.test/page (любая страница с этого поддомена) - всегда начинал со скрипта в папке xerox/index.php Запрос project.never.test/page (любая страница с этого поддомена) - всегда начинал со скрипта в папке project/index.php Запрос never.test/page (любая страница с основного домена) - всегда начинал со скрипта в папке index.php Далее запрос на файлы из папки xerox/resources (css, java, картинки) если они существуют (флаг -s насколько я помню) отдавались пользователю. К примеру xerox.never.test/resources/img/project-logo.png отдавалось из xerox/resources/img/project-logo.png К примеру project.never.test/resources/img/project-logo.png отдавалось из project/resources/img/project-logo.png К примеру never.test/resources/img/project-logo.png отдавалось из public/resources/img/project-logo.png Ну в самом конце если ни один поддомен не подошел (ошибочный ввели то [R=404,L]). Мой идеальный вариант был таким.
0
|
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
31.05.2018, 23:01 [ТС] | 8 |
p.s. Надо переварить про зацикливание. Теперь мне кажется что я захотел что-то слишком сложное ))
Спасибо за разъяснение, впервые увидел про "запускает обработку запроса снова и снова"
0
|
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
|
|
01.06.2018, 05:39 | 9 |
Сообщение было отмечено Neverov как решение
Решение
Остановить зацикливание можно так:
Код
RewriteCond %{ENV:REDIRECT_STATUS} . RewriteRule ^ - [L] Т.к. имена поддоменов совпадают с именами папок, то можно сделать так: RewriteCond %{SERVER_NAME} ^(xerox|project)\.never\.test$ - при успешном совпадении шаблона в переменной %1 будет сохранено имя поддомена.Код
RewriteCond %{SERVER_NAME} ^(xerox|project)\.never\.test$ RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f RewriteRule ^(resources/.*)$ %1/$1 [L] RewriteCond %{SERVER_NAME} ^(xerox|project)\.never\.test$ RewriteRule ^ %1/index.php [L] Кликните здесь для просмотра всего текста
Код
RewriteEngine On RewriteBase / RewriteCond %{ENV:REDIRECT_STATUS} . RewriteRule ^ - [L] RewriteCond %{SERVER_NAME} ^(xerox|project)\.never\.test$ RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f RewriteRule ^(resources/.*)$ %1/$1 [L] RewriteCond %{SERVER_NAME} ^(xerox|project)\.never\.test$ RewriteRule ^ %1/index.php [L] RewriteCond %{SERVER_NAME} ^never\.test$ RewriteCond %{DOCUMENT_ROOT}/public/$1 -f RewriteRule ^(resources/.*)$ %1/$1 [L] RewriteCond %{SERVER_NAME} ^never\.test$ RewriteRule ^ index.php [L] RewriteRule ^ - [R=404,L]
1
|
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
|
|
01.06.2018, 06:43 [ТС] | 10 |
Emilien, Спасибо тебе огромное.
0
|
01.06.2018, 06:43 | |
01.06.2018, 06:43 | |
Помогаю со студенческими работами здесь
10
Не пойму как работает Не пойму как работает цикл не пойму как работает лазер Не пойму как работает char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |