Войти
ПрограммированиеФорумВеб

PHP, URL Rewrite и REQUEST_URI (2 стр)

Страницы: 1 2
#15
10:33, 24 мая 2015

Duncon
> Чтоб получить URL после переопределения rewrite, который заменяет регуляркой
> указанный параметр my=xy на /xy, нужно опростить тот же параметр
уверен?
если бы это было так то я бы тему не создал,
в REQUEST_URI изначальный URI, а не измененый регуляркой
походу придется ставить говноапач что бы тестировать все ваши предположения

#16
10:38, 24 мая 2015

Duncon
> Для этого в nginx нужно дописать строчку, которой в твоём конфиге не увидел,
> что-то типа:
а ты каждую строку в моем конфиге понимаешь?
потому что я вообще не пойму к чему ты тогда свою строку привел?
если делать так как ты предлагаешь, что мне мешает в строке запроса передать параметр q и он перезапишет, то что мы передаем чере rewrite
но об этом всем я уже писал

Duncon
> И вообще сожги себя на костре вместе с IIS, его по-моему кроме майкрософта никто не использует.
ну по любому ведь, говноапач лучше объективно, а не просто потому что его предустанавливают на каждый первый недохостинг
опа
http://news.netcraft.com/archives/2015/05/19/may-2015-web-server-survey.html
а даже ввиду довода выше, у M$ второе место O_o как так... ох ох ох

#17
14:53, 24 мая 2015

лан уговорил, ставлю апач, буду показывать. что у меня не получается
в nginx, наиболее прямая конфигурация, там для решения задачи даже rewrite не нужен, а винды у меня дома нету, что бы еще раз показать, что у меня не получается с IIS

#18
19:22, 24 мая 2015

Duncon
нафига?

#19
19:40, 24 мая 2015

щас пробовал короче настраивать апач,
понимаете. это все как бы не то
давайте пойдем от другого
вот полный конфиг nginx с комментариями

server {
  listen 80;
  server_name localhost;
  set $server_root "/var/www/localhost";
  root $server_root/public;
  try_files $uri @php; # пробуем найти файл соотвествующий URL-адресу, если нет передаем запрос в @php
  location @php {
    fastcgi_pass unix:/run/php-fpm.localhost.socket; # передаем запрос на сервер php-fpm
    fastcgi_param SCRIPT_FILENAME $server_root/app.php; # указывам скрипт который необходимо выполнить
    include fastcgi_params;
  }
}
+ fastcgi_params

как сделать так же апачем?

#20
23:42, 24 мая 2015

Ты можешь отвечат на вопрос который задан?

#21
11:24, 25 мая 2015

какой хост, о чем ты?
ты не понимаешь чем отличается мой конфиг nginx от твоего?
да все просто, в моем не используется rewrite в принципе,
запрос проксируется на указанный скрипт не меняя ни чего
какой смысл в переопределении URL-адреса, если нам нужно просто спроксировать запрос на нужный скрипт,
а дальше уже программный роутинг средствами PHP
навига здесь rewrite?

#22
16:18, 25 мая 2015

Duncon
ты понимаешь, что для проксирования запроса
нет смысла делать переопределение непонятно во что
или ты не можешь поверить что такое может быть?

ты понимаешь, что CGI это просто интерфейс согласно, которому параметры исполняемому файлу передаются через переменные окружения,
и ему совершенно по барабану какой там у тебя запрос, в случае PHP достаточно передать правильный SCRIPT_FILENAME и все
и переопределение здесь совсем не нужно

ты хотя бы понимаешь, что приведенный мной конфиг Nginx работает, и делает ровно то что нужно
и мне не нужно приводить другой конфиг Nginx, я спрашиваю как тоже самое сделать апачем

но я надеюсь ты понимаешь, что это вообще абсурд, и мне нафиг не всрался апач,
и вся эта потеха только для того что бы объяснить тебе, что не нужно делать переопределение URL адреса, для того что бы передать запрос в PHP скрипт
если такое не возможно в апаче, то апач говно, но мне собственно пофиг.

я со всей этой фигней затеялся, только что бы показать, то что я хочу с точки зрения апача,
потому что ни во что кроме апача, вы походу не умеете
я уже даже для IIS нашел ответ на вопрос темы
IIS передает измененный URL через $_SERVER["URL"]
apache который я тоже проверил через mod_php
передает измененный URL через $_SERVER["REDIRECT_URI"]

с помощью переопределения URL
проблема которую я тут обозначал в IIS решается вот так

                <rule name="Static content" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <conditions>
                        <add input="{APPL_PHYSICAL_PATH}public{URL}" matchType="IsFile" />
                    </conditions>
                    <action type="Rewrite" url="public{URL}" appendQueryString="false" logRewrittenUrl="true" />
                </rule>
                <rule name="All other" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <action type="Rewrite" url="app.php" logRewrittenUrl="true" />
                </rule>

но это через переопределение, а нужно без него
конфиги для апача я приводить не буду
потому что апач говно и мне надоело в нем ковыряться
но вот точно нет смысла делать так

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] #реврайт
изначальный URI запроса итак передается в PHP через
$_SERVER["REQUEST_URI"]
нафига его передавать в Query String я хз
подобные строки в конфигах появляются, потому что люди, которые 10+ лет разбираются в конфигах апача,
за 10+ лет так и не задумались ни разу, а как оно все работает, работает да и ладно
RewriteRule .* index.php [L,QSA]

#23
17:58, 25 мая 2015

Duncon
> index.php?q=$1 смысл есть, ты его просто не понимаешь.
ну ты же понимаешь, расскажи

#24
18:07, 25 мая 2015

Duncon
> nginx в проксирующем режиме - по другому конфиги выглядят у тебя там строчек что-то типа proxy_pass нет.
а вообще меня поражает, твоя уверенность в том что у меня в конфиге что-то не так, когда я привожу рабочий конфиг O_o
и ты уверен, что это не ты чего то не догоняешь, а у меня конфиг не правильный
из официальной доки:

Модуль ngx_http_proxy_module позволяет передавать запросы другому серверу.
Модуль ngx_http_fastcgi_module позволяет передавать запросы FastCGI-серверу

а теперь магия
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BA%D1%81%D0%B… 2%D0%B5%D1%80
и объясни мне, какая разница куда мы проксируем запросы?
на другой сервер, или на fastcgi сервер?

и не хочу тебя огорчать, но апач таки умеет проксировать и в том числе fastcgi
https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html
я не понял как его настроить так же как nginx, но тем неменее

#25
1:22, 28 мая 2015

Duncon
> и какие танцы с бубном если "без него обойтись"?
да да расскажи
> без фраемворков адрес распарсить не могут.
чувак, ты передаешь в качестве параметра адресс, который и так передается через REQUEST_URI
или ты немного туговат и до сих пор этого понять не можешь?

Duncon
> Может ты индус и у нас сложности понимания из-за гуглтранзлейта?
сложности понимания есть, потому что у нас кто то туговат, это точно
на вопрос "что передается в REQUEST_URI?" приводят конфиг mod_rewrite
а вопрос,  "через что передается URL после mod_rewrite?" вообще вгоняет в ступор
это безусловно тяжелый случай.

Duncon
> Или ты думаешь что нюансов совсем нет между пересылкой заголовков бэкенду и общением с cgi сервером..
все нюансы в том, что бэкенду заголовки передаются в теле HTTP запроса, а cgi серверу как перемmodенные окружения
> Собственно объясни тогда зачем разные методы?
/facepalm

Duncon
> Я тоже не хочу тебя огорчить - я имел ввиду http проксирование..
mod_proxy_http

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

#26
1:34, 28 мая 2015

Duncon
и на последок, я понимаю что до тебя врятли дойдет половина того, что я пишу, это все слишком сложно
но давай хотя бы на одном примере разберем, что тебе лучше в эту тему не лезть

вот твой конфиг с предыдущей страницы

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
я понимаю, читать других сложно, но если бы ты хотя бы начало предыдущей страницы прочитал, то увидел бы там вот такой конфиг
который привел MDS, я вы режу из него не существенное
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
я хочу обратить внимание лишь на последние строки
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

vs
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

и скажу откуда у этого конфига растут ноги,
а это не много не мало конфиг из какаса приложения ZendFramework
ты же знаешь, что это такое?
если нет погугли
https://github.com/zendframework/ZendSkeletonApplication/blob/mas… lic/.htaccess
а теперь расскажи товарищам из Zend
Duncon
> Троллишь или действительно не понимаешь что произойдёт при данном условии и для
> чего можно применить, и какие танцы с бубном если "без него обойтись"? Хотя я
> забываю что нынешнее "программисты" без фраемворков адрес распарсить не могут.

#27
13:01, 28 мая 2015

Duncon
> Конечно туговат, теперь давай расскажи как ты снимешь результат реврайта в
> ситуации если например ?.ru/реальная-папка/реврайты/пошли/. Я не говорю что не
> реально, я говорю что это танцы с бубном и лишние инструкции в коде, когда при
> передаче параметром он у тебя сразу в кармане..
кажется ты начал понимать суть этой темы...
осталось чуть чуть, и ты поймешь, что

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
тут ты получишь не измененный URL, тот же самый что и в REQUEST_URI
я понимаю, что для тебя это шок, но синтакс RewriteRule вот такой
RewriteRule Pattern Substitution [flags]
на соответствие паттерну проверяется REQUEST_URI
на основе REQUEST_URI создается группа
и потом эта группа передается в подстановку
т.е. в твоем выражении $1=REQUEST_URI
другое дело, что в REQUEST_URI лежит изначальный запрос
а правил переопределения может быть несколько
грубо говоря есть какое либо API мы вводим версии этих API
а выбор соответствущей версии будем делать через правила переопределения.
допустим у нас
REQUEST_URI = /api
переопределяем
/api => /api/v1
перенаправляем в скрипт
/api/v1 = /index.php
вот тут если мы через подстановку регулярных выражений
сделаем
/api/v1 = /index.php?q=/api/v1
мы получим то о чем ты говоришь,
но проблема у такого подхода в том, что
если изначальный URL будет вот такой
/api?q=bums
то в PHP к нам придет
/index.php?q=/api/v1&q=bums
а по правилам разбора параметров запроса последний параметр перепишет предыдущие
и всю нашу потеху можно поломать
именно по этому меня интересовал вопрос как по другому получить переопределенный URL
ну так ответ на него прост
в Apache измененный url передается в REDIRECT_URI на сколько я понял
в IIS в URL
в nginx вообще пофиг можно настроить
сам измененный URL лежит в $uri а его уже можно передать куда хочешь

Duncon
> Ну может это потому что тебя в школе не научили чётко формировать свои мысли?
смотрим #3

в REQUEST_URI что вообще помещается?

как еще четче сформулировать?
смотрим #18
но так же встает закономерный вопрос, как получить URL уже после его переопределения?

какое из слов необходимо разжевать?
может надо выделять вопросы жирным цветом?
вопросительного знака в конце предложения не достаточно?

Duncon
> чтд. фрэймворки для оленей и пишут их так же олени зачастую.
100%
> а оказывается на том конце сидит нечто пришедшее потешить своё самолюбие.

Duncon
> Написал бы решение твоей проблемы, может наконец сообщество тебя поймёт.
я написал его еще в #10 посте
но ты же не поверил, что это рабочий конфиг nginx, у тебя там гдето шаблон порвался
конфиг для IIS в #32
конфиг для апача мне собственно ни  когда и не нужен был, ибо не на чем особо тестировать
это вы мне начали сувать конфиги для mod_rewrite вместо того что бы ответить, на задаваемые мной вопросы.

#28
10:38, 31 мая 2015

Duncon
> тебе пытались помочь 2 человека
и оба приводили конфиги апача, в ответ на совсем другой вопрос

Страницы: 1 2
ПрограммированиеФорумВеб

Тема в архиве.