Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [mod_rewrite] Jedno polecenie ..., ... dla wszystkich podstron
e0d9
post 22.04.2006, 17:23:11
Post #1





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


Witam

Mam pewien problem z mod_rewrite. Posiadam dosc rozbudowana strone ktora ma kilkadziesiat podstron. Kazda podstrona ma rozszerzenie php. Chcialbym aby ich adresy byly bez rozszerzenia. Probowalem zastosowac taka opcje:

RewriteEngine on
RewriteRule ^linkzamienny$ linkprawidlowy

I to dziala. Lecz niepozytywne byloby dodawanie RewriteRule dla kazdej podstrony. Czy istnieje mozliwosc za pomoca jednej linii zamienic wszystkie adresy podstron (po prostu odejmujac od nich rozszerzenie .php) ?
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 18:06:55
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


Kod
RewriteRule ^(.+) $1.php [L]


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
e0d9
post 22.04.2006, 18:28:43
Post #3





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


Niestety nie działa.

"Internal Server Error"
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 21:26:59
Post #4





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


hmm, cóż, tego wyżej nie testowałem, ale spróbuj tak, to już przetestowane i działa na 100%
Kod
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !(.*)\.php$ [NC]
RewriteRule ^(.+) $1.php [L]


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
e0d9
post 22.04.2006, 21:34:56
Post #5





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


Owszem dziala, ale inaczej nizbym sie mogl spodziewac.

Teraz do adresu dodawane jest po prostu rozszerzenie .php. Powoduje to, ze wpisanie prawdziwego adresu (z rozszerzeniem) nie dziala oraz nie dziala index (bo jak wiadomo apache wyswietla z katalogu index.php, a po dodaniu w/w kodu przegladarka poszukuje "index.php.php").
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 21:43:07
Post #6





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


widze ze nie testowałeś
Kod
RewriteCond %{REQUEST_FILENAME} !(.*)\.php$ [NC]

ta linia powoduje ze jeśli w adresie występuje już rozszezenie php to sprawdzanie linków i ich podmiana nie występuje. Po drugie to nie przeglądarka wyszukuje linków (index.php) bo równie dobrze w ustawieniach serwera mozesz sobie ustawić ze plikiem domyślnym ma być ala.ma.kota i to on zostanie zwrócony przeglądarce jeśli serwer nie zostanie poproszony o żaden inny plik. Pozatym reguła ta działą tylko jeśli podasz jakiś ciąg także w wypadku gdy nic nie zostanie podane (poza scierzką do katalogu w którym znajduje się folder z plikiem .htacces to nie wykona się żadna podmiana linków.


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
e0d9
post 22.04.2006, 21:51:15
Post #7





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


ok, dziala. Dzieki smile.gif

Tylko jeszcze jedno pytanie.
Jak zrobic to samo z innymi rozszerzeniami (przykladowo gdy mam na serwerze php i html) ?

Gdy ponizej dodam linie:

RewriteCond %{REQUEST_FILENAME} !(.*)\.html$ [NC]
RewriteRule ^(.+) $1.html [L]

to wywala "internal server error".
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 21:55:10
Post #8





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


Kod
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !(.*)\.(php|htm|html|jpg|jpeg|gif|png|zip|rar|doc|xls)$ [NC]
RewriteRule ^(.+) $1.php [L]

wszystko w nawiasie okrągłym to jakby tablica możliwych rozszerzeń, jej elementy są oddzielone od siebie pionowymi liniami.


/dopisane
Moduł mod_rewrite nie moze wiedzieć czy chodzi ci o plik html czy o php, dlatego najlepszym wyjściem jest zapisyanie wszystkich plików którym chcesz usunąć rozszerzenie (w taki sposóB) z rozszerzeniem php zamiast html - parser poprostu nie sparsuje go i tyle (bo nie bedzie tam kodu php)
inaczej się nie da w taki prosty sposób.

Ten post edytował devnul 22.04.2006, 22:00:37


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
e0d9
post 22.04.2006, 22:08:24
Post #9





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


Troche to "pogmatwane".

Podany przez ciebie sposob dziala, lecz ma pewna niedogodnosc.
W pierwszej lini musze podac wszystkie typy plikow jakie mam na stronie bo inaczej sie nie otwieraja.
Kiedy wpisze sciezke do jakiegos folderu, np. adres.pl/folder, to wyskakuje "No input file specified." pomimo ze mam w tym katalogu plik index.php.

Ten post edytował e0d9 22.04.2006, 22:08:46
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 22:21:16
Post #10





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


wpisaną scierzkę zakończ slashem "/" i po kłopocie

//dopisane

zresztą nei ma rozwiązań idealnych - tymbardziej ze chcesz pójść na łatwizne zastosować jedno rozwiązanie do wszystkich podstron - wóz albo przewóz - wybór należy do Ciebie winksmiley.jpg

Ten post edytował devnul 22.04.2006, 22:23:12


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
siemakuba
post 22.04.2006, 22:36:53
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat
W pierwszej lini musze podac wszystkie typy plikow jakie mam na stronie bo inaczej sie nie otwieraja.


Jezeli chcesz aby wszystkie istniejace pliki otwieraly sie normalnie dodaj przed RewriteRule cos takiego:

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


To spowoduje, ze reguly beda stosowane tylko do:
-d - istniejacych katalogow o rozmiarze wiekszym niz 0
-s - istniejacych plikow o rozmiarze wiekszym niz 0

vide: Apache mod_rewrite

pozdr.
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 22:47:00
Post #12





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


widze ze nie czytałeś tematu. Kolega chgce ukrywac rozszerzenia ale tylko wybranych plików a reszte zostawić w spokoju, dodatkowo nie chce definiować nazw tych plików, więc to moze byc wszystko i w dowolnie głębokim katalogu, więc jakoś nie widze tu zastosowania dla sposobu podanego przez Ciebie


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
siemakuba
post 22.04.2006, 23:16:58
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


owszem, czytałem temat. Nie napisałem przeciez: "Zrob tak i bedzie wszystko działac tak jak chcesz". Bardziej moim zamyslem bylo pokazanie co mozna zastosowac dodatkowo aby wypracowana przez was metoda byla skuteczniejsza.

Kod
# zajmij sie tylko wywolaniami do nieistniejacych plikow/katalogow

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s [OR]

# a jesli istnieja to tylko tymi z nastepujacym rozszerzeniem

RewriteCond %{REQUEST_FILENAME} !(.*)\.(php|htm|html)$ [NC]

RewriteRule ^(.+) $1.php [L]


razem polaczone da to taki efekt, ze mozesz ukryc rozszerzenia wybranych plikow, np. *.php, *.html, *.html, a pozostale istniejace pliki beda wyswietlane normalnie.

http://localhost/moja_strona.html -> pasuje, przetlumaczone na moja_strona.php
http://localhost/moje_style.css -> nie pasuje, pokaz norlmalnie.

popraw mnie, jezeli sie myle.
pozdr.
Go to the top of the page
+Quote Post
devnul
post 22.04.2006, 23:31:03
Post #14





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


Cytat
http://localhost/moja_strona.html -> pasuje, przetlumaczone na moja_strona.php
jak rozumiem to ten plik nie istnieje na serwerze, więc zwróciłoby błąd 404 z racji tego ze moja część kodu nie interpretuje dalej jeśli rozszerzenie pliku konczy się na któreś wyrażeń


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
siemakuba
post 23.04.2006, 00:04:54
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat
Cytat
http://localhost/moja_strona.html -> pasuje, przetlumaczone na moja_strona.php

jak rozumiem to ten plik nie istnieje na serwerze, więc zwróciłoby błąd 404 z racji tego ze moja część kodu nie interpretuje dalej jeśli rozszerzenie pliku konczy się na któreś wyrażeń


Racja, to nie byl najlepszy przyklad :)
Bedzie dzialac dla istniejacego pliku *.html, zosatnie on poprostu wyswietlony.

Skoro chodzi o ukrycie rozszerzen, to taki przyklad bedzie lepszy:

http://localhost/moja_strona -> tlumaczone na moja_strona.php
http://localhost/obrazek.jpg -> jezeli istnieje, pokazywany
Go to the top of the page
+Quote Post
devnul
post 23.04.2006, 00:34:17
Post #16





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


no to tak zbiore do "kupy" i dodam od siebie jeszcze jedną rzecz, która przyda się podczas gdy ktoś się pomyli i poda zły link winksmiley.jpg
Kod
# zajmij sie tylko wywolaniami do nieistniejacych plikow/katalogow
ErrorDocument 404 http://localhost/error404.html

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s [OR]

# a jesli istnieja to tylko tymi z nastepujacym rozszerzeniem

RewriteCond %{REQUEST_FILENAME} !(.*)\.(php|htm|html)$ [NC]

RewriteRule ^(.+) $1.php [L]

oczywiście plik error404.html musi istnieć zeby mógł byc wyświetlony smile.gif


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
e0d9
post 23.04.2006, 20:14:54
Post #17





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


O to mi wlasnie chodzilo !

Teraz jest wysmienicie ! Strony dzialaja zarowno z rozszerzeniem jak i bez niego. Mozna tez odwolywac sie do katalogow. Dzieki.

P.S. A jednak- rozwiazanie idealne smile.gif

EDIT:

A jednak, nie idealne smile.gif
Zamiast wyswietlac 404, przy podaniu blednej strony wyswietla sie blad 500 "internal server error" sad.gif

Ten post edytował e0d9 23.04.2006, 20:25:34
Go to the top of the page
+Quote Post
siemakuba
post 23.04.2006, 20:46:33
Post #18





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat(devnul @ 2006-04-23 00:34:17)
oczywiście plik error404.html musi istnieć zeby mógł byc wyświetlony :)

oczywiscie plik error404.html istnieje? ;)
Go to the top of the page
+Quote Post
e0d9
post 23.04.2006, 20:47:35
Post #19





Grupa: Nieautoryzowani
Postów: 12
Pomógł: 0
Dołączył: 22.04.2006

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


oczywiscie ze istnieje.
Go to the top of the page
+Quote Post
siemakuba
post 23.04.2006, 20:55:37
Post #20





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Hmmm.... w takim razie problem musi leżeć gdzie indziej, np tu:

źródło: Apache manual
Cytat
ErrorDocument directive
Override: FileInfo


Sprawdz czy masz ustawione Override: FileInfo (lub All) w http.conf
A) Directory
B) VirtualHost
na katalog w ktorym masz strone (tam gdzie .htaccess)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 09:29