Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mod_rewrite] Połączenie reguł
sebekzosw
post
Post #1





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Witam!

Piszę z prośbą o pomocy przy połączeniu reguł . Mam takie 2 reguły:


  1. RewriteRule ^(.*)\.html$ $1.php?page=$1[QSA,L]


i

  1. RewriteRule ^(.*)\.html$ page.php?id=$1 [QSA,L]


Załóżmy, że nie istnieje plik text.php i powinno się wykonać takie coś:

Wpisujemy adres www.domena.pl/text.html . jeżeli nie istnieje plik text.php to wykonuje się page.php?id=text . Jeżeli plik istnieje to się wykona. Nie mam pojęcia jak to połączyć, a jest mi to potrzebne w celu skrócenia wpisów to tak to dla każdej podstrony mi się będzie powtarzała jedna reguła czyli:

  1. RewriteRule ^podstrona\.html$ podstrona.php?page=podstrona[QSA,L]
  2. RewriteRule ^podstrona2\.html$ podstrona2.php?page=podstrona2[QSA,L]



Takie coś ma być:

  1. RewriteCond %{REQUEST_FILENAME} -d
  2. RewriteCond %{REQUEST_FILENAME} -f
  3. RewriteRule ^(.*)\.html$ $1.php?page=$1[QSA,L]
  4.  
  5. RewriteRule ^(.*)\.html$ page.php?id=$1 [QSA,L]


wpisałem

  1. print_r($_SERVER);


i może problem jest to, że po wpisaniu www.domena.pl/test.html wywala takie coś:

Kod
[REQUEST_URI] => /test.html



Kod
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteRule ^(.*)\.html$ $1.php [QSA,L]

RewriteRule ^(.*)\.html$ page.php?id=$1 [QSA,L]


jeżeli istnieją pliki [nazwa].php (w przeglądarce wpisuje [nazwa].html) to wszystko dobrze mi dopasowuje. Jednak jeżeli plik nie istnieje powinno mi jakiś dopasować do reguły
Kod
RewriteRule ^(.*)\.html$ page.php?id=$1 [QSA,L]
- tylko nie wiem dlaczego to nie robi ;/ mogę liczyć na pomoc? w mozilli wywala mi błąd:

Cytat
Not Found

The requested URL /o-mnie.php was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.



Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(4[^/]*)$ /process.php?variable=$1 [L]

RewriteCond %{SCRIPT_FILENAME} !process\.php
RewriteRule ^([^/]*)$ index.php?$1


znalazłem coś takiego:
http://stackoverflow.com/questions/1478993...1479971#1479971

ale nie mogłem dopasować tego ;/

Ten post edytował sebekzosw 6.07.2010, 16:38:43
Go to the top of the page
+Quote Post
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Hmm, a przekaż całość do php i tam sobie to obrób. (IMG:style_emoticons/default/smile.gif)
Kod
RewriteRule ^(.*)$ modrewrite.php?url=$1

Coś w ten deseń. I sprawdzasz file_exists czy plik istnieje, jeśli tak to require_once plik, jeśli nie to require_once page.php i ustawienie zmiennej _GET.

Pozdrawiam, Michał.
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Prawie jak zawsze odsyłam:
http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html
Go to the top of the page
+Quote Post
sebekzosw
post
Post #4





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Cytat(bim2 @ 6.07.2010, 22:38:44 ) *
Hmm, a przekaż całość do php i tam sobie to obrób. (IMG:style_emoticons/default/smile.gif)
Kod
RewriteRule ^(.*)$ modrewrite.php?url=$1

Coś w ten deseń. I sprawdzasz file_exists czy plik istnieje, jeśli tak to require_once plik, jeśli nie to require_once page.php i ustawienie zmiennej _GET.

Pozdrawiam, Michał.



to jest ostateczna możliwość (IMG:style_emoticons/default/smile.gif)

Cytat(fifi209 @ 6.07.2010, 23:03:26 ) *


widziałem tą stronę wiele razy podczas szukania odpowiedzi na moje pytanie jednak tam jej nie ma ;/
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
jeżeli istnieją pliki [nazwa].php (w przeglądarce wpisuje [nazwa].html) to wszystko dobrze mi dopasowuje. Jednak jeżeli plik nie istnieje powinno mi jakiś dopasować do reguły

W zalinkowanej notce wyraźnie napisałem, że warunki obowiązują do najbliższego RewriteRule. Dla drugiego musisz mieć osobne.
Go to the top of the page
+Quote Post
sebekzosw
post
Post #6





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Cytat(erix @ 7.07.2010, 09:49:24 ) *
W zalinkowanej notce wyraźnie napisałem, że warunki obowiązują do najbliższego RewriteRule. Dla drugiego musisz mieć osobne.


Wiem, czytałem to, więc mam taką regułę:

Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ page.php?id=$1 [L]

RewriteCond %{SCRIPT_FILENAME} !page\.php
RewriteRule ^(.*)\.html$ $1.php [QSA,L]


Jeżeli wpiszę www.domena.pl/o-mnie.html (nie ma pliku o-mnie.php) to dobrze mi się wykonuje reguła - dodaje mi do pliku page.php?id=o-mnie. Ale jeżeli wpisze www.domena.pl/test.html (plik test.php istnieje) to próbuje mi to podpiąć pod page.php co skutkuje błędem. A sposób:
Cytat
Przerzucić obsługę przepisywanych adresów bezpośrednio do skryptu sprawdzając jedynie, czy istnieją pliki/katalogi, czy nie. O tym już na koniec artykułu.
jak już mówiłem wcześniej, to ostateczność...
Go to the top of the page
+Quote Post
ADeM
post
Post #7





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Popatrz na kolejność swoich reguł. Pierwsza reguła pasuje do adresu i w dodatku ma flagę L, więc dalej już nawet nie szuka.
Go to the top of the page
+Quote Post
sebekzosw
post
Post #8





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


ale zobacz wcześniej:

Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


sprawdza czy plik/katalog istnieje... jezeli nie to ma robic sie plik page.php a nie robi sie ;/
Go to the top of the page
+Quote Post
ADeM
post
Post #9





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Mój błąd. Ale w takim razie chyba sprawdzasz plik ze złym rozszerzeniem ;-)
Go to the top of the page
+Quote Post
sebekzosw
post
Post #10





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


dobrze sprawdzam (IMG:style_emoticons/default/smile.gif) tak było w książce (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bim2
post
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Tylko, że {REQUEST_FILENAME} to będzie chyba bez .php albo z .html bo juz się pogubiłem (IMG:style_emoticons/default/winksmiley.jpg) Tak czy siak, nie znajdzie ci poprawnie nigdy pliku.
Go to the top of the page
+Quote Post
sebekzosw
post
Post #12





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


"{REQUEST_FILENAME} - pełna ścieżka dostępu do pliku wymienionego w żądaniu. Jest to ta sama wartość, którą przechowuje zmienna {SCRIPT_FILENAME}" - taka ciekawostka...

Ale chodzi oto, że w połowie to działa, tzn jeżeli plik nazwa.php nie istnieje do dopisuje do page.php?id=nazwa. jednak jeżeli plik nazwa2.php też istnieje to i tak podpina do page.php?id=nazwa2 a powinien wykonać regułę w następnym RewriteRule.


Jaki jest w tym błąd:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ page.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !page\.php
RewriteRule ^(.*)\.html$ $1.php [QSA,L]
Go to the top of the page
+Quote Post
ADeM
post
Post #13





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


No ale już Ci przecież napisałem co masz źle...

Masz na serwerze pliki:
-page.php
-test.php

Wywolujesz "http://domena.pl/test.html". Serwer sprawdza czy istnieje plik test.html. Nie istnieje (istnieje test.php), więc idzie na "page.php?id=test".

Ten post edytował ADeM 7.07.2010, 20:35:08
Go to the top of the page
+Quote Post
sebekzosw
post
Post #14





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


po części masz racje mimo iż w SCRIPT_FILENAME jest /test.php a nie test.html a jak wcześniej pisałem to REQUEST_FILENAME == SCRIPT_FILENAME - w takim razie jakie jest rozwiązanie tego problemu?
Go to the top of the page
+Quote Post
ADeM
post
Post #15





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


Kod
RewriteCond %{DOCUMENT_ROOT}/sciezka/do/pliku/$1.php -f
RewriteRule ^(.*)\.html$ $1.php [L]
RewriteRule ^(.*)\.html$ page.php?id=$1 [L]
Go to the top of the page
+Quote Post
sebekzosw
post
Post #16





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Kod
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.*)\.html$ $1.php [QSA,L]
RewriteRule ^(.*)\.html$ page.php?id=$1 [QSA,L]
Go to the top of the page
+Quote Post

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: 27.09.2025 - 07:06