Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php oddanie sterowania serwerowi apache
Forum PHP.pl > Forum > PHP
szagi3891
Wyobraźmy sobie sytuację że mamy stronę opartą o skrypt index.php na który są kierowane wszystkie wywołania poprzez plik ".htaccess".

przykładowy plik htaccess który to powoduje :

  1. <?php
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteRule (.*) index.php [L]
  5. ?>


Niezależnie jaki adres zostanie wywołany to za każdym razem wykonany zostanie plik index.php



Załóżmy teraz że obok pliku "index.php" i pliku ".htaccess" tworzymy katalog "media" do którego będziemy chcieli się odwoływać (gdzie będą znajdować się obrazki, style, skrypty java script i inne rzeczy potrzebne przy wizualizacji strony).

(załóżmy że w katalogu media mamy pliki obrazek1.jpg obrazek2.jpg styl1.css skrypt1.js)
Mam teraz zasadnicze pytanie :

jak zrobić żeby po wpisaniu np. adresu odnoszącego się do obrazek1.jpg został on zwrócony ?

  1. <?php
  2. np : domena.pl/media/obrazek1.jpg -- > ma zostać zwrócony obrazek1.jpg z katalogu media
  3. np : domena.pl/media/obrazek2.jpg -- > ma zostać zwrócony obrazek2.jpg z katalogu media
  4. np : domena.pl/media/styl1.css -- > ma zostać zwrócony styl1.css z katalogu media
  5. np : domena.pl/media/skrypt1.js -- > ma zostać zwrócony skrypt1.js z katalogu media
  6. np : domena.pl/blabla -> uruchamainy plik index.php - który na podstawie paska adresu podejmuje właściwe decyzje co ma zostać wyświet
    lona
  7. np : domena.pl/blabla2222 -> uruchamainy plik index.php  - który na podstawie paska adresu podejmuje właściwe decyzje co ma zostać wyświet
    lona
  8. ?>



Można to zrealizować za pomocą dodatkowego wpisu w pliku ".htaccess" :
RewriteRule ^media/(.*)$ media/$1 [L]

lecz chciałbym tego uniknąć. Strasznie łatwo coś z pliku "htaccess" zepsuć i bardzo łatwo błąd 500 można otrzymać.
Czy ktoś ma jakiś pomysł bądź jakieś swoje sprawdzone rozwiązanie ma opatentowane w tym przypadku ?


@edit - meritum


chodzi o funkcję czy taka istnieje że : jej parametrem jest ścieżka do pliku
efektem jest :
wyświetlenie zawartości tego pliku w przeglądarce tak jak gdyby został on bezpośrednio w pasku adresu wywołany.
carbolymer
Wyrzuć odpowiednie headery dla odpowiedniego typu obrazka oraz taki myk:
  1. <?php
  2. echo file_get_contents('media/sciezka/do/obrazka/jpg');
  3. ?>

I powinno wyświetlić Ci ten obrazek. Choć osobiście bym polecał Ci zrobić wykluczenia w htaccess dla tegoż folderu.
Dla innych plików podobnie, tylko uważaj na zabezpieczenia bo w tym tkwić może luka. Kwestia tylko rozpoznania końcówki adresu w przeglądarce. ;]
dr_bonzo
Kod
RewriteEngine On

RewriteRule ^$ / [QSA]

RewriteCond %{REQUEST_FILENAME} !-f                               << jesli plik NIE istnieje na dysku to przekieruj wywoalnie na indeks
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
szagi3891
Nie chciał bym korzystać z funkcji php która wczytuje plik. Wolał bym aby php przerzucało to zadanie na apache. Chodzi mi bardziej czy jest jakiś interfejs api za pomocą którego skrypt php mógłby powiedzieć serwerowi apache :

słuchaj Ty no apachu, to żądanie co prawda mi przekierowałeś (mówi skrypt) lecz moim życzeniem jest abyś w ramach tego zadania udostępnił plik /media/xxx.jpg gdyż ten użytkownik poprawnie przeszedł proces autoryzacji (sprawdzenie session_id itp ...)


Z tego co wygrzebałem do tej pory w jakimś stopniu można by spróbować zastosować :
http://httpd.apache.org/docs/1.3/mod/mod_r...html#RewriteMap

Bądź funkcję :
http://pl.php.net/manual/pl/function.virtual.php

O ile mapa nie spełnia wszystkich moich oczekiwań to w ostateczności pewnie zastosuje to rozwiązanie.

Natomiast funkcja virtual nie chce działać na serwerach nazwy oraz innym jeszcze serwerze.

Czy ktoś na coś takiego ma pomysł ?
dr_bonzo
@szagi3891: czytales moj post? sprawdzales jak to dziala? smile.gif
szagi3891
Widzę. Jak plik nie istnieje to kieruje wywołanie na index.

Ale mi chodzi o coś trochę innego. O to aby php sam mógł decydować że oddaje sterowanie apachowi który ma coś udostępnić.

Obczajasz ? smile.gif
carbolymer
Musisz zrobić jakąś klauzulę w .htaccess, dzięki której przekierowanie z bootstrapa do jakiegoś pliku nie trafi do spowrotem niego. Bo problem wygląda następująco:
* Apacz dostaje req
* Prasuje .htaccess
* .htaccess przekierowuje do bootstrapa
* bootstrap mówi że ma ten plik w dupie i przekazuje to do apacza ( przychodzi mi do głowy tylko header() )
* apacz dostaje zapytanie
* apache parsuje .htaccess (i jeżeli chcesz uniknąć zapętlenia musisz tu umieścić klauzulę w req, jakąś którą rozpozna .htaccess i nie pozwoli na zapętlenie)
* htaccess widzi klauzulę i przekierowuje do pliku...
Ja to tak rozumiem.
szagi3891
Cytat(carbolymer)
* .htaccess przekierowuje do bootstrapa
* bootstrap mówi że ma ten plik w dupie i przekazuje to do apacza ( przychodzi mi do głowy tylko header() )
* apacz dostaje zapytanie
* apache parsuje .htaccess (i jeżeli chcesz uniknąć zapętlenia musisz tu umieścić klauzulę w req, jakąś którą rozpozna .htaccess i nie pozwoli na zapętlenie)
* htaccess widzi klauzulę i przekierowuje do pliku...


Właśnie o coś takiego w zarysie mi chodzi. Tylko nie wiem jeszcze jak to wykonać :/
dr_bonzo
Hmmm, dodac w php do URL'a "/cos" na poczatku i dac redirecta.
Potem w htaccess dla URLi z /cos na poczatku:
- wycinasz /cos
- normalnie dajesz plik [img, js], zamiast przekierowac do index.php
szagi3891
Nie chodzi mi o kombinowanie z adresami. Adres ma pozostać ten sam. Dobrze by było że zamiast żądania php ma nakazać apachowi udostępnić jakiś plik.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.