Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Apache + mod_rewrite, Przekierowanie na inny port
anas
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 22.09.2002
Skąd: Gorzów Wlkp

Ostrzeżenie: (0%)
-----


Witam.

Od jakiegoś czasu walczę z problemem połączenia dwóch wersji php(php5 oraz php4) jako moduły na jednym apache'u - odpada możliwość robienia jednej wersji jako CGI ze względu na zmienne środowiskowe. Udało mi się po zmianie w źródłach php5 mime-type na inny zainstalować to na jednym apache'u, z tym że php5 chodzi na innym porcie i teraz chciałbym wszystkie wywołania do plików z rozszerzeniem php5 przekierować (np. za pomocą mod_proxy) na ten sam adres z tym że na port 8080 i do tego samego pliku.

Czyli jak ktoś wpisze.

http://www.mojastrona.pl/skrypt.php5 -> przekieruje go wewnętrznie za pomocą mod_rewrite na adres http://www.mojastrona.pl:8080/skrypt.php5 itd - http://mojastrona.pl/katalog/skrypt.php5 na http://mojastrona.pl:8080l/katalog/sktypt.php5

a jeżeli chodzi o pozozstałe skrypty, chciałbym żeby były one przetwarzane na porcie 80, wg configa dla php4.

Jeżeli uda mi się to jakoś złożyć do kupy, postaram się napisać jakiegoś tutoriala jak to zrobić krok po kroku.

pozdrawiam i dzięki za każdą podpowiedź

anas

Ps. Taki oto kod udalo mi sie uzyskac od pewnego administratora z za granicy, ktory to przekierowuje wywolania dla plikow z koncowka .php5 na inny serwer dodajac do wywlywanej domeny przedrosterk php5.


Kod
<IfModule mod_proxy.c>
RewriteEngine On
# this condition should only match on files ending in php5 (any case)
RewriteCond %{REQUEST_FILENAME} ^(.*).php5$ [NC]
# this condition picks apart the host part of the URL, we need
# to change www.alpha.com -> php5.alpha.com
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
# this rule modifies the request and submits as proxy
RewriteRule (.*)(\.php5)   http://php5.%1/$1$2 [P,NC]
ProxyRequests Off

</IfModule>


Ten post edytował anas 3.03.2005, 17:49:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
- Dlaczego ustawiasz dyrektywe ProxyRequests na Off ? Tego zapisu kompletnie nie rozumiem.

To jest tutaj zabieg czesciowo kosmetyczny.. nie ma wplywu na dzialanie calego tego mechanizmu, ale wylacza proxy, tak zeby powiedzmy ktos inny majacy dostep do Twojego apacha nie ustawil go sobie czasem jako proxy.

Cytat
- Nastepnie uruchamiasz mod_rewrite i zapisujesz warunek ze jesli zmienna srodowiskowa (bo z tego co rozumiem przez %{zmienna} odwolujemy sie do zm. srodowiskowych) rozpoczyna sie od 0 lub wiecej dowolnych znajow i konczy na .php5, to on to zapisze do zmiennej $1 uzytej w RewriteRule - parametr [NC] oznacza ze nie bedzie bral pod uwage wielkosci liter

prawie dobrze.. on tego nie zapisze do $1 uzytego w RewriteRule. Substringi z RewriteCond sa zapisywane do zmiennych %N, ale do konca nie wiem jeszcze w jaki sposob (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W kazdym razie zmienne $N w RewriteRule to sa odwolania do substringow z tej samej dyrektywy tylko ze z pierwszego parametru. Czyli jak mamy RewriteRule /(.*) http://%{HTTP_HOST}:88/$1 [P] to $1 jest odwolaniem sie do (.*) z pierwszej czesci.

Cytat
- i od razu zapytam czy nie lepiej byloby zapisac to o tak ^(.+).php5$ - bo to wymusi ze plik sklada sie z przynajmniej jednego lub wiecej znakow + .php5 ?

Jasne, tak jest teoretycznie poprawniej, ja po prostu skopiowalem to z Twojego pierwszego posta. Aczkolwiek w tym przypadku jesli ktos poda jako requesta samo rozszerzenie to i tak takiego pliku nie bedzie, wiec czy to apache + php4 czy apache + php5 zwroci komunikat bledu to juz nie robi wielkiej roznicy.

Cytat
- teraz w RewriteRule - dlaczego zaczyna sie pierwszy czlon od znaku / i do czego sluzy pierwszy czlon - co w nim sprawdzasz

Caly string ktory dopasowujemy w RewriteRule pochodzi bezposrednio z naglowka, czyli jak mamy request typu:
Cytat
GET /jakis/katalog/skrypt.php?zm=cos&zm2=cos2 HTTP/1.0

to do RewriteRule idzie cala ta sciezka, lacznie z wszelkimi parametrami (pogrubione)
Caly ten czlon chcemy przekazac dalej, bo w nim nic nie zmieniamy, a slash jest tylko dla wygody.. moglem to zapisac rownie dobrze tak:
RewriteRule (.*) http://%{HTTP_HOST}:88$1 [P]
ale jak widzisz nic nie oddziela portu od $1, wiec postanowilem wykluczyc slasha z dopasowywania i zamiescic go recznie jako separator portu od $1.

Cytat
jak spelni sie warunek z RewriteCond to on stworzy ciag http://zmienna_srod_przechowujaca_wywolywa...a_z_RewriteCond i parametr [P] - aby przekazal to do mod_proxy?

Znowu blisko (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale to juz opisalem wczesniej.. wiec zmienna jest przekazywana nie z RewriteCond, a z pierwszego parametru RewriteRule, gdzie mamy (.*) (wlasnie to - tzn. to co zostaje do tego dopasowane, czyli wszystko - jest tam wstawiane)

sie napisalem... mam nadzieje ze troche pomoglo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 23:50