Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] mod_rewrite i problem z obrazkami
Forum PHP.pl > Forum > Przedszkole
Poker
Witam wszystkich

Na moim portalu stało się coś bardzo nie oczekiwanego, mimo że nie kombinowałem w pliku .htaccess, nagle przestały wyświetlać się obrazki (problem rozwiązałem podmianą nazw), ale chciałbym się dowiedzieć na przyszłość czym to mogło być spowodowane.

Otóż problem wygląda tak.

Mając "przyjazne linki" typu

Kod
RewriteRule ^profil/(.*)/ustaw-opis profil.php?login=$1&typ=opis
RewriteRule ^profil/(.*) profil.php?login=$1
RewriteRule ^profil profil.php



Wszystkie zdjęcia które znajdują się w pliku /images i mają początkową nazwę profil, niestety się nie wyświetlają.
Całość działała bez problemów i nagle wszystko się zmieniło, co prawda nie było dużo takich obrazków, ale troszkę kłopotu miałem by je zmienić.


To samo również tyczy się innych przekierowań:

Kod
RewriteRule ^krzykacz krzykacz.php


obrazki z nazwą krzykacz się nie wyświetlają



Początek pliku .htaccess wygląda tak:

Kod
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena.pl
RewriteRule (.*) http://www.domena.pl/$1 [R=301,L]
by_ikar
jeżeli w html robisz adres do obrazków tak:

Kod
<img src="images/obraz.jpg">


to się nie dziw że ci dodaje "profil". Jeżeli tak, to używasz tak zwanych relatywnych adresów, a kiedy bawisz się w htaccess i twoje linki są jakby symulacją katalogów, wówczas musisz używać absolutnych adresów do plików. zarówno w html jak i css adresy do plików podajesz mniej więcej tak:

absolutny adres, pełen:
Kod
<img src="http://strona.pl/images/obraz.jpg">


absolutny adres:

Kod
<img src="/images/obraz.jpg">


Jeżeli twoja strona jeszcze jest w jakimś katalogu, powiedzmy some, i adres wygląda miej więcej tak: http://strona.pl/some/index.php wtedy adresy do plików podajesz tak:

absolutny adres, pełen:
Kod
<img src="http://strona.pl/some/images/obraz.jpg">


absolutny adres:

Kod
<img src="/some/images/obraz.jpg">
Poker
Właściwie, to w taki sposób korzystam.

Kod
<link rel="stylesheet" type="text/css" href="/css/style.css" />



Następnie w css:
Kod
#wybierzkategorie input#przeslij {width:192px; height:42px; background: url(/images/btnzadajpytanie.png) no-repeat; border:0px; text-indent:-15000px; float:right; margin-top:15px;}




I właśnie w tym wypadku problemem okazało się:

Kod
#wybierzkategorie input#przeslij {width:192px; height:42px; background: url(/images/[b]zadajpytaniebtn[/b].png) no-repeat; border:0px; text-indent:-15000px; float:right; margin-top:15px;}


Ponieważ ten obrazek wyświetlany jest w /zadajpytanie
nospor
Powinieneś swoje regułki stosować dopiero wtedy, gdy plik lub katalog nie istnieje:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


czyli u Ciebie coś takiego:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profil/(.*)/ustaw-opis profil.php?login=$1&typ=opis
RewriteRule ^profil/(.*) profil.php?login=$1
RewriteRule ^profil profil.php
Poker
Cytat(nospor @ 31.08.2011, 13:20:52 ) *
czyli u Ciebie coś takiego:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profil/(.*)/ustaw-opis profil.php?login=$1&typ=opis
RewriteRule ^profil/(.*) profil.php?login=$1
RewriteRule ^profil profil.php



Zrobiłem tak, ale nadal nie daje to zamierzonych efektów.


Podam konkretnie jak to wygląda.

Próbuję otworzyć plik przez przeglądarkę
http://www.domena.pl/images/zadajpytaniebtn.jpg

I otrzymuję error
Cytat
Not Found
The reguestet URL /images/pytaj.php was not found on this serwer



w .htaccess mam

Kod
RewriteRule ^zadajpytanie pytaj.php

nospor
No a dodałeś moje rewriteCond co ci napisałem?
To rewriteCond powoduje, że jesli fizycznie na serwerze jest plik, do którego się odwołujesz, to regułka się nie wykona. Skoro tobie się regułka wykonuje to:
1) albo olałeś mojego posta i nie dodałeś rewriteCond
2) albo takie zdjęcie na serwerze fizycznie nie istnieje

ps: te rewriteCond trzeba chyba dodać przed każdym rewriteRule smile.gif
Poker
Tak dodałem teraz w .htaccess wygląda to tak

Kod
RewriteEngine On
RewriteCond %{HTTP_HOST} ^pytano.pl
RewriteRule (.*) http://www.pytano.pl/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^podglad/(.*)/([0-9]+) profil.php?login=$1&podglad=$2
RewriteRule ^profil/(.*)/ustaw-opis profil.php?login=$1&typ=opis
RewriteRule ^profil/(.*) profil.php?login=$1
RewriteRule ^profil profil.php



Zdjęcie jest na pewno na serwerze.

Dodam też że wczoraj wszystko działało poprawnie, nie miałem żadnych problemów i nagle samo z siebie przestało wyświetlać pliki z nazwami profil, zadajpytanie, krzykacz...

nospor
Spójrz na PS: z mojego poprzedniego posta wink.gif

w tym htaccess nie widzię nic o PYTAJ, o ktorym pisałes w poprzednim poście.
Poker
Dodałem przed każdym, i niestety to nic nie daje (na pewno nie u mnie)

Sam jestem w ogóle zdziwiony bo naprawdę to działało i nagle samo przestało.
Mimo że nie miałem tych dodatków w .htaccess to wszystko było poprawnie wyświetlane, a wczoraj coś się zbuntowało i nagle przestało mi wyświetlać pliki.


plik .htaccess jest dużo dłuższy podałem tylko cześć, dalatego nie było widać cześci "pytaj"
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.