Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [RewriteRule] pliki css i obrazki
Forum PHP.pl > Forum > Przedszkole
!*!
Kod
RewriteEngine On
RewriteBase /

RewriteRule ^(css)-([a-z0-9_]+)-([a-z0-9.]+)$ /files/user/$2/css/$3


w html dam

Kod
<link rel="stylesheet" href="css-'.$nazwa.'-style.css" type="text/css" />


i css jest wczytywany bez problemu, jednak... nie działają obrazki które są w tym samym katalogu co plik css.
sowiq
Nie dziwię się smile.gif
Nie linkuj do obrazków jako url('obrazek.gif'), tylko url('/files/user/{nazwa_stylu}/css/obrazek.gif').

A to dlatego, że przeglądarka dostaje adres arkusza stylów w ten sposób, jakby był on w katalogu głównym, a nie w /files/user... - to serwer zapewnia, że wczytuje się plik akurat z tej lokalizacji. A ponieważ adresy obrazków podaje się relatywnie do arkusza CSS, to musi być tak, jak Ci napisałem powyżej winksmiley.jpg
!*!
a nie mogę tego ustawić url('obrazek.gif') ? I jednocześnie zamaskować jakoś RR? Nie mam za bardzo możliwości zmiany w plikach css, interesuje mnie tylko zamaskowanie adresu do nich
Pilsener
Cytat
url('/files/user/{nazwa_stylu}/css/obrazek.gif')
- mało praktyczne. Jak użytkownik dodaje obrazek do kategorii to ma mieć
  1. <img src="obrazek.gif" />
- identycznie jak definiuje sobie style dla tej kategorii.

Zainteresuj się znacznikiem <base> i dla każdego URL ustawiaj ścieżkę, skąd mają być pobierane obrazki oraz skrypty JS etc.
!*!
Kod
pliki/user/stefan/css


to katalog oficjalny

chciałbym to zmienić na:

Kod
css-stefan-style.css


dlatego wpisuję:

Kod
RewriteRule ^(css)-([a-z0-9_]+)-([a-z0-9.]+)$ /pliki/user/$2/css/$3


Kod
<base href="css-'sefan'">


Kod
domek/index.php


w tym katalogu odwoluję się do plików css usera

aby to zrobić musiałem wpisywać

Kod
../pliki/user/stefan/css/style.css


teraz mam

Kod
css-stefan-style.css


I jest dobrze, ale.. bez obrazków, ustawienie base nic nie daje, a zdefiniować plików graficznych nie potrafię...
erix
Cytat
I jest dobrze, ale.. bez obrazków, ustawienie base nic nie daje, a zdefiniować plików graficznych nie potrafię...

Kod
RewriteCond %{REQUEST_FILENAME} !-f

Przed regułką.

Ale z tego, co widzę, to i tak będziesz musiał osobną regułkę dla obrazków napisać, gdyż przeglądarka nie wie, gdzie to wszystko jest trzymane.
sowiq
Cytat(erix @ 17.01.2009, 13:24:26 ) *
Ale z tego, co widzę, to i tak będziesz musiał osobną regułkę dla obrazków napisać, gdyż przeglądarka nie wie, gdzie to wszystko jest trzymane.

Będzie musiał napisać po jednej regułce dla każdego pliku CSS (są one trzymane z obrazkami w różnych katalogach). A z tego wynika, że i tak nie obejdzie się bez edycji plików CSS.
!*!
Czyli nie można tego ustawić... heh nie mogę zmienić zawartości plików css, niezłe ograniczenia :/ Nie ma innego sposobu zamaskowania ścieżki do pliku css? Pomijając sesję?
erix
A tak spytam, po co w ogóle maskować...?

Cytat
Pomijając sesję?

Trochę nie mogę sobie tego uzmysłowić... ;/

Ale tak, czy tak, skoro w plikach CSS masz ścieżki dostosowane do starego schematu i nie możesz ich zmieniać, to jaki jest sens całego przedsięwzięcia z mod_rewrite...? Serwer wie, że przekierowywujesz, przeglądarka nie.
!*!
Dostałem w spadku serwis do "naprawy", niestety poprzedni admin nie był zbyt roztargnięty i dość ważne pliki umieścił w formie dość jawnej... Choćby dla tego chciałbym to jakoś zamaskować, aby nie była widoczna ścieżka do katalogów usera np. "../pliki/user/stefan/hasla/css" itp. nie wiem czemu ale jakoś nie ufam

Kod
../


w źródle strony... Taki jakiś mój nawyk :/
sowiq
Skoro dostałeś ten serwis do poprawy, to niby czemu nie możesz edytować CSS? Robisz tak:

w CSS:
Kod
url('img.gif') -> url('nazwa_stylu-img.gif')

w .htaccess:
Kod
RewriteRule ^(styl1|styl2|styl3|inne_style)-([a-zA-Z0-9_])\.(gif|jpg|png\inne_rozszerzenia)$ pliki/user/$1/obrazki/$2.$3
(zależnie jaką masz ścieżkę do obrazków)

Robisz coś w tym stylu i masz po kłopocie. Zresztą, jeśli masz jakieś pliki niefortunnie umieszczone w ogólnodostępnym miejscu, to zawsze możesz odciąć do nich dostęp po wpisanie adresu do przeglądarki poprzez proste regułki .htaccess -> Protecting a single file
!*!
Widzisz, bo to nie ja edytuje te pliki, ogólnie jest ok 340k ludzi, którzy zmieniają je praktycznie codziennie... Są przyzwyczajeni to wpisywania "url(obrazek.png)" więc sam rozumiesz... Mógłbym pozamieniać ręcznie adresy, tylko że to nie będzie kompatybilne wstecz, oraz wprowadzi mega zamieszanie... Liczyłem na to że reguły pomogą mi to jakoś rozwiązać, z zachowaniem tych samych adresów w plikach css.
sowiq
Musisz zrozumieć jedno. Jeśli dajesz w pliku CSS url('obrazek.gif'), a plik CSS wywołujesz przez ścieżkę /files/css/cos_innego, to przeglądarka będzie szukała obrazka w katalogu, z którego wywołany został plik CSS (ścieżki obrazków są relatywne do pliku CSS). A skoro stosujesz mod_rewrite, to przeglądarka widzi plik CSS, jakby był wczytywany z głównego katalogu. Tam też będzie szukała plików z obrazkami.

Masz co prawda jeszcze jedno, inne wyjście. Robisz coś w stylu:
Kod
RewriteRule ^([a-zA-Z0-9_]+)\.(gif|jpg|png)$ obrazki.php?id=$1.$2


W pliku obrazki.php robisz
  1. <?php
  2. header('Content-type: '.$type); // $type musisz ustalić na podstawie rozszerzenia
  3. @readfile('sciezka/do/plikow/'.$aktuany_styl.'/obrazki/'.$_GET['id']);
  4. // $aktualny_styl, tak jak mówiłeś, przechowujesz np. w sesji
  5. ?>


Oczywiście powyższy kod trzeba zabezpieczyć przed ścieżkami w stylu ../../../

2. wyjście - Redirect 302 w pliku php.

Nie wiem które lepsze - zależy od ruchu na stronie.
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.