[mod_rewrite] Jedno polecenie ..., ... dla wszystkich podstron |
[mod_rewrite] Jedno polecenie ..., ... dla wszystkich podstron |
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) ? |
|
|
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]
-------------------- |
|
|
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" |
|
|
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] -------------------- |
|
|
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"). |
|
|
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. -------------------- |
|
|
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
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". |
|
|
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 -------------------- |
|
|
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 |
|
|
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 Ten post edytował devnul 22.04.2006, 22:23:12 -------------------- |
|
|
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. |
|
|
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
-------------------- |
|
|
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. |
|
|
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ń
-------------------- |
|
|
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 |
|
|
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
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 -------------------- |
|
|
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 EDIT: A jednak, nie idealne Zamiast wyswietlac 404, przy podaniu blednej strony wyswietla sie blad 500 "internal server error" Ten post edytował e0d9 23.04.2006, 20:25:34 |
|
|
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? ;) |
|
|
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.
|
|
|
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) |
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 02:55 |