![]() |
![]() ![]() |
![]() |
![]()
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:
i
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:
Takie coś ma być:
wpisałem 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 |
|
|
![]()
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ł. |
|
|
![]()
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 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 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ł. to jest ostateczna możliwość (IMG:style_emoticons/default/smile.gif) Prawie jak zawsze odsyłam: http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html widziałem tą stronę wiele razy podczas szukania odpowiedzi na moje pytanie jednak tam jej nie ma ;/ |
|
|
![]()
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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 437 Pomógł: 42 Dołączył: 16.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
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ść... |
|
|
![]()
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.
|
|
|
![]()
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 ;/ |
|
|
![]()
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 ;-)
|
|
|
![]()
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)
|
|
|
![]()
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.
|
|
|
![]()
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] |
|
|
![]()
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 |
|
|
![]()
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?
|
|
|
![]()
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] |
|
|
![]()
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] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 07:06 |