Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [apache][php] mod_rewrite + błąd 404 w PHP
Dynuel
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 27.12.2003

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


Struktura linków na stronie będzie taka:

www.domena.com/nazwa-kategorii
www.domena.com/nazwa-kategorii/
- link do kategorii, gdzie nazwa będzie składać się z takich znaków: 'a-z', 'A-Z', '0-9', '-'

www.domena.com/nazwa-kategorii/4
www.domena.com/nazwa-kategorii/4/
- link do strony w kategorii, naturalnie numer strony będzie składał się wyłącznie z: '0-9'

do rozpoznawania adresów mam taki plik .htaccess
  1. RewriteEngine On
  2. RewriteRule ^([a-zA-Z0-9-]+)/$ index.php?category=$1 [L]
  3. RewriteRule ^([a-zA-Z0-9-]+)$ index.php?category=$1 [L]
  4. RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)$ index.php?category=$1&page=$2 [L]
  5. RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)/$ index.php?category=$1&page=$2 [L]

1. po wejściu na stronę naturalnie w php wartości $category i $page będą sprawdzane czy istnieją i w przypadku gdy nie istnieją chciałbym wywalić komunikat o błędzie 404 poprzez php, i teraz pytanie jakiego kodu php powinienem urzyć?
2. jak zrobić w pliku .htaccess że wszystkie adresy które nie dopasują sie do żadnej z powyższych regółek zostaną przekierowane na jeden konkretny adres np. /blad.php
3. styczność z mod_rewrite mam dopiero od kilku dni więc prosił bym by ktoś zerknął na powyższy kod pod względem poprawności (na powyższe adresy) oraz optymalizacji (czasu wykonywania)


--------------------
Go to the top of the page
+Quote Post
dadexix
post
Post #2





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


1. normalnego.. robisz kod strony np. 404.php i kod który sprawdza czy jest taki art.. jak nie ma to dajesz include("404.php");
2. chyba tak:

Kod
RewriteRule ^([^a-zA-Z0-9-]+) blad.php [L]
RewriteRule ^([^a-zA-Z0-9-]+)/([^0-9]+) blad.php [L]

oznacza to.. jeśli adres nie zgadza się z wzorem ro wyświetl blad.php

(takie małe doszkolenie:
"W nawiasach kwadratowych znak '^' ma inne znaczenie. Oznacza ono zaprzeczenie, czyli jeśli umieści się je przed znakiem lub zakresem, to ten znak lub zakres nie będzie mógł się pojawić w tym miejscu."
http://webmade.org/kursy-online/wyrazenia-...ne-kurs-php.php )

3. nie lepiej poprostu dać tak:

Kod
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)/ index.php?category=$1 [L]
RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+) index.php?category=$1&page=$2 [L]
? bez tych 2 lini? jeśli dasz $ na końcu to wtedy gdy znajdzie się / to będzie błędnie działać... ale ten dolar nie potrzebny... a bez niego będzie działać nie zależnie czy będzie /artkul1/ czy /artykul1 czy /artykul1/dsggsd zawsze wywali index.php?category=artykul1
Proste nie?


Edit: nie wiem skąd mi się wzieło to o artykulach.. skąd w ogóle pomysł że chcesz arty robić... nie wiem:P w każdym bądz razie nie przejmuj się tym że cały post o artach... nie chce mi się zmieniać..

Ten post edytował dadexix 8.01.2008, 19:07:19


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
Dynuel
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 27.12.2003

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


Cytat(dadexix @ 8.01.2008, 20:05:58 ) *
1. normalnego.. robisz kod strony np. 404.php i kod który sprawdza czy jest taki art.. jak nie ma to dajesz include("404.php");

tak sprawdzanie czy dany 'art' istnieje jest na samym początku skryptu, i mnie chodzi o to ze ja nie chce po prostu wyświetlić jakiejś tam informacji o błędzie 404, tylko chce wysłać w nagłówku ( header() ) informacje o błędzie do wyszukiwarki i dopiero ona ma wyświetlić swoją domyślną stronę błędu

Cytat(dadexix @ 8.01.2008, 20:05:58 ) *
2. chyba tak:

Kod
RewriteRule ^([^a-zA-Z0-9-]+) blad.php [L]
RewriteRule ^([^a-zA-Z0-9-]+)/([^0-9]+) blad.php [L]

oznacza to.. jeśli adres nie zgadza się z wzorem ro wyświetl blad.php

  1. RewriteRule ^([^a-zA-Z0-9-]+) blad.php [L]
  2. RewriteRule ^([^a-zA-Z0-9-]+)/([^0-9]+) blad.php [L]
  3. RewriteRule ^([a-zA-Z0-9-]+)/$ index.php?category=$1 [L]
  4. RewriteRule ^([a-zA-Z0-9-]+)$ index.php?category=$1 [L]
  5. RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)$ index.php?category=$1&page=$2 [L]
  6. RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)/$ index.php?category=$1&page=$2 [L]
  7. RewriteRule images/([a-z0-9-_.]+)$ images/$1 [L]

powyższy kod nie dziala, np na adres www.domena.com/dupa_/ wywala błąd 404, nie odsyła do blad.php

Cytat(dadexix @ 8.01.2008, 20:05:58 ) *
3. nie lepiej poprostu dać tak:

Kod
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)/ index.php?category=$1 [L]
RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+) index.php?category=$1&page=$2 [L]
? bez tych 2 lini? jeśli dasz $ na końcu to wtedy gdy znajdzie się / to będzie błędnie działać... ale ten dolar nie potrzebny... a bez niego będzie działać nie zależnie czy będzie /artkul1/ czy /artykul1 czy /artykul1/dsggsd zawsze wywali index.php?category=artykul1
Proste nie?

i tutaj akurat chce by odsyłało do strony jedynie w przypadku poprawnego adresu, nie chce zeby np adres : '/artykul1/dsggsd' w ogole działał, zakres swoich adresów juz podałem wyżej

www.domena.com/nazwa-kategorii
www.domena.com/nazwa-kategorii/
www.domena.com/nazwa-kategorii/4
www.domena.com/nazwa-kategorii/4/

i nic wiecej, wszystko inne chce wysłać np do pliku blad.php (podpunkt 2 tego tematu) i tam w php wywalić blad 404 (podpunkt 1 tego tematu)

Ten post edytował Dynuel 8.01.2008, 19:23:45


--------------------
Go to the top of the page
+Quote Post
dadexix
post
Post #4





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Cytat
powyższy kod nie dziala, np na adres www.domena.com/dupa_/ wywala błąd 404, nie odsyła do blad.php
a utworzyłeś plik blad.php? bo ten skrypt nie odeśle do strony bład tylko przepisze adres na błąd.php - na pasku i na stronie błędów będzie ciągle request_url
jeśli chcesz uzyskać by na pasku adresu zniknął błędy adres a pokazał się adres strony blędu to w pliku błąd.php wpisz header("Location: $adres"); gdzie zmienna adres podaje plik strony błędu... oczywiście plik błąd.php być plikiem błędu:)

Twój htaccess:

Kod
RewriteRule ^([^a-zA-Z0-9-]+) blad.php [L]
RewriteRule ^([^a-zA-Z0-9-]+)/([^0-9]+) blad.php [L]
RewriteRule ^([a-zA-Z0-9-]+)/([^0-9]+) index.php [L]
RewriteRule ^([a-zA-Z0-9-]+) index.php?category=$1 [L]
RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+) index.php?category=$1&page=$2 [L]
RewriteRule images/(.+) images/$1 [L]
objaśnienie(wg. numeru lini):
1. jeśli nazwa kategorii jest zła wywala plik blad.php
2. jesli nazwa kategorii i strona sa nie poprawne wywala blad.php
3. jesli strona nie jest w cyfrach przenosi do index //mozesz wsawić błąd.php czy co tam chcesz:) chyba że Cie źle zrozumiałem i chcesz że jeśli ktoś da kat1/2/aaaa to wywali bład czy coś w tym stylu..? a przeszkadza Ci ta końcówka? jeśli Ci przeszkadza to daj
Kod
RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?category=$1 [L]
RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)/?$ index.php?category=$1&page=$2 [L]

4. jeśli nazwa kategori jest dobra przepisuje adres
5. jesli nazwa kategorii i nazwa strony jest good przepisuje adres
6. przepisuje obrazki:) w takim wypadku możesz to zrobić inaczej... robisz katalog images a w jego htaccess RewriteEngine Off
Cytat
i nic wiecej, wszystko inne chce wysłać np do pliku blad.php (podpunkt 2 tego tematu) i tam w php wywalić blad 404 (podpunkt 1 tego tematu)

Kod
<?
header("HTTP/1.0 404 Not Found");
echo "404/ nie ma takiej strony";
?>


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 07:14