problem z mod_rewrite |
problem z mod_rewrite |
20.03.2004, 10:44:14
Post
#1
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Zastosowałem się do instrukcji na http://php.faq.pl/docs/rewrite.php , jednak kod, który jest tam napisany nie działa tak jak powinien (Windows).
Kod RewriteRule ^/(files|images)/(.*)$ /monstrum/php/$1/$2 [l]
RewriteRule !^/(files|images)/.*$ /monstrum/php/index.php [l] powoduje Internal Server Error gdy zmienię na: Kod RewriteBase /monstrum/php/
RewriteRule ^(files|images)/(.*)$ $1/$2 [l] RewriteRule !^(files|images)/.*$ index.php [l] wydaje się działać, jednak tylko dla adresów takich jak: /monstrum/php/test i monstrum/php/test_123. Nie działa natomiast w przypadku gdy dodam jeszcze jeden znak /, czyli: /monstrum/php/test/ lub /monstrum/php/test/123 strona otwiera się, jednak bez plików z folderów files i images Pomocy:) |
|
|
21.03.2004, 17:20:59
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) |
Jeżeli użyasz mod_rewrite to musisz do obrazków, JSów i innych dać adres bezwględny, np. "/img/costam.gif".
-------------------- |
|
|
21.03.2004, 17:26:54
Post
#3
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
zawsze tak robie
ale problem mam z '/': tak jakby (.*) łapał litery, cyfry ale już nie '/' Może mógłbyś mi pokazać Twój kod, który działa podobnie? (o ile taki posiadasz) |
|
|
21.03.2004, 17:36:48
Post
#4
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
może to pomoże:
win.htaccess: (tak się u mnie nazywa) Kod RewriteEngine on
RewriteBase /monstrum/php/ RewriteRule ^win.htaccess$ - [F] RewriteRule ^(files|images)/(.*)$ $1/$2 [l] RewriteRule !^(files|images)/.*$ index.php [l] dla http://localhost/monstrum/php/test Kod http://localhost/monstrum/php/images/logo.jpg
dla http://localhost/monstrum/php/test/ Kod http://localhost/monstrum/php/test/images/logo.jpg
...coś musi być nie tak z tym wyrażeniem chyba... |
|
|
21.03.2004, 18:25:28
Post
#5
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Cytat Jeżeli użyasz mod_rewrite to musisz do obrazków, JSów i innych dać adres bezwględny, np. "/img/costam.gif".
Działa mi tylko takie coś: Kod <IMG SRC="/monstrum/php/images/logo.jpg">
Naprawde musi tak być? nie widziałem jeszcze żeby ktoś w linku do obrazka podawał np: Kod <IMG SRC="/home/users/*****/public_html/images/logo.jpg"> itd:)
|
|
|
21.03.2004, 18:38:30
Post
#6
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Kod RewriteEngine on
RewriteRule ^/(files|images)/(.*)$ /monstrum/php/$1/$2 [l] RewriteRule !^/(files|images)/.*$ /monstrum/php/index.php [l] (zgodnie z http://php.faq.pl/docs/rewrite.php) powoduje Internal Server Error : Kod [Sun Mar 21 18:37:08 2004] [error] [client 127.0.0.1] mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.
|
|
|
21.03.2004, 20:06:50
Post
#7
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 1 Dołączył: 17.07.2003 Ostrzeżenie: (0%) |
RewriteEngine on
# zostaw w spokoju obrazki! #RewriteCond !/var/www/html/dyplom/www/%{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*/.*$ /index.php Przeskoczylem z innego tematu. Ja uzywam takiego motywu... nie pamietam jak powstal, ale straaaaasznie sie meczylem i wykorzystuje cos takiego (zauwaz, ze wczesniej probowalem innego rozwiazania). Idea jest taka - nie wiem czy to pasuje do tematu, bo jestem zbyt zajety zeby sie zastanawiac (j2me na warsztacie dzisiaj). Chodzi o to, ze jezeli nie ma pliku, to jest przekierowywane do /index.php a tam juz sobie sprawdzam jaki adres byl wpisany. Tutaj jest moja obsluga /krotko opisze/: /** na podstawie adresu zwraca argv[] i argc */ function getParams() { global $argv, $argc; // tak sobie wymyslilem zeby sie z C kojarzylo $module = explode("/",$_SERVER['REQUEST_URI']); // rozdzielamy $argv = array(); $argc = 0; // usuwanie pustych foreach($module as $k => $v) if (strlen($v) != 0) { if (strchr($v,"?")) $argv[] = substr($v,0,strrpos($v,"?")); else $argv[] = $v; $argc++; } // teraz w /index.php // whichModules(); // i tutaj mam zaimplementowane wywolanie modlulu } |
|
|
22.03.2004, 00:55:58
Post
#8
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 22.10.2003 Skąd: Trójmiasto Ostrzeżenie: (0%) |
Cytat Zastosowałem się do instrukcji na http://php.faq.pl/docs/rewrite.php , jednak kod, który jest tam napisany nie działa tak jak powinien (Windows).
... Moze to Ci pomoze Kod RewriteRule (^|/)p/c/(.*)$ pics/sites/_common/$2 [L]
RewriteRule (^|/)common.css$ css/_common.css [L] RewriteRule (^|/)js/(.*)$ core/js/$2 [L] Takie proste przekierowania - sorki, ze nie analizowalem Twojego problemu ale mi to dziala po prostu wszystko co jest <a href="p/c/foo.gif"> -> kieruje na plik pics/sites/_common/foo.gif <script js="js/tralala.gif"> -> kieruje na plik core/js/tralala.gif itd. moze to cos pomoze - w razie co pytaj moge pomoc. Aha jeszcze jedno: Kod RewriteRule ^/(files|images)/(.*)$ /monstrum/php/$1/$2 [l]
RewriteRule !^/(files|images)/.*$ /monstrum/php/index.php [l] nie wiem dlaczego tak zrobiles - no chyba, ze na serwerze masz katalog /monstrum/php/... - ale raczej nie sadze - pamietaj, ze to jest sciezka na serwerze do pliku a nie URL. Poza tym ja zrobilbym tak Kod RewriteRule ^/(files|images)/(.*)$ /monstrum/php/$1/$2 [L]
RewriteRule .* /monstrum/php/index.php [L] Chodzi o to, ze jesli na koncu jest [L] i zostanie wykonany pierwszy warunek to w drugim nie ma co wstawiac jego zaprzeczenia. Natomiast jesli pierwszy nie zadziala to zadziala na pewno drugi - wszystko jest przekierowywane na plik index.php (o ile oczywiscie istnieje na serwerze plik /monstrum/php/index.php) Ja u siebie mam to zrobione tak Kod RewriteRule (^|/)p/c/(.*)$ pics/sites/_common/$2 [L]
RewriteRule (^|/)common.css$ css/_common.css [L] RewriteRule (^|/)js/(.*)$ core/js/$2 [L] RewriteRule .* index.php [L] oczywiscie calosc trzymam w pliku .htaccess w glownym katalogu projektu. Aha, zamiast tego linku do artykulu ktory gdzie tutaj sie pojawil proponuje obejrzec dokumentacje od mod_rewrite na http://httpd.apache.org/docs/mod/mod_rewrite.html a oprocz tego URL Rewriting Guide na http://httpd.apache.org/docs/misc/rewriteguide.html. Powodzenia -------------------- "Use the force - read the source"
|
|
|
22.03.2004, 03:04:11
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) |
A napisz jaki chcesz osiagnąć efekt - to znacyz, co zamienić na co.
-------------------- |
|
|
22.03.2004, 14:42:41
Post
#10
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
O zamienianiu narazie nawet nie marze. Chcę tylko, żeby wszystko po np: localhost/monstrum/php/ było ignorowane oprócz samych plików oczywiście;)
Wartości już sobie sparsuje. |
|
|
22.03.2004, 14:56:35
Post
#11
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Kod RewriteRule ^/(files|images)/(.*)$ /monstrum/php/$1/$2 [L]
RewriteRule .* /monstrum/php/index.php [L] powoduje: Kod Internal Server Error
Mon Mar 22 14:44:42 2004] [error] [client 127.0.0.1] mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary. Cytat Moze to Ci pomoze
działa coś takiego: Kod RewriteEngine on
RewriteRule (^|/)images/(.*)$ images/$2 [L] RewriteRule (^|/)files/(.*).css$ files/$2.css [L] RewriteRule .* index.php [L] Przynajmniej taki mi się narazie wydaje;)) Jedyna wada, to to, że wyraźnie wolniej się ładuje. Update: Już chyba dobrze chodzi, może mi się tylko wydawało. Ostatecznie zostało na: Kod RewriteEngine on
RewriteRule (^|/)(images|files)/(.*)$ $2/$3 [L] RewriteRule .* index.php [L] Dzięki dooshek i wszystkim, którzy próbowali pomóc. Nareszcie się wyśpie! I jeszcze pytanie na koniec: Mogę tego używać bez obaw, że zostanie wykorzystane do niecnych celów? |
|
|
23.03.2004, 21:19:54
Post
#12
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Niestety wyniknął problem, gdy przetestowałem to online.
Okazuje się, że przeglądarka nie zapamiętuje grafiki, gdy stosuje się adresy w omawianej wyżej postaci. Czy tak musi być? za każdą zmianą zmiennej (/zmienna_wartosc/zm_war/) grafika pobiera się na nowo, co znacząco spowalnia ładowanie się strony. Czy zauważyliście to samo u siebie? Update: Przykłady: dla adresu http://localhost/monstrum/php/ adres obrazka wygląda tak: http://localhost/monstrum/php/images/logo.jpg ale już dla adresu http://localhost/monstrum/php/zmienna_wartosc/ wygląda tak: http://localhost/monstrum/php/zmienna_wartosc/images/logo.jpg (adres wzięty z właściwości obrazka) Zauważyłem, że na stronach takich jak php.pl czy sterprojekt.pl efekt ten nie występuje i adresy obrazków pozostają niezmienione. |
|
|
31.03.2004, 16:34:29
Post
#13
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) |
Cytat Jeżeli użyasz mod_rewrite to musisz do obrazków, JSów i innych dać adres bezwględny, np. "/img/costam.gif".
To jest rozwiązanie do ostatniego postu. Dzięki spenalzo! Update: Oczywiście podziękowania należą się spenalzo, błąd wynikł z tego, że akurat czytałem coś scannera w innym wątku i tak mi się jakoś napisało:) Jeszcze raz dziękuję. |
|
|
31.03.2004, 17:25:41
Post
#14
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
Wiem, że jestem popularny i uwielbiany, ale te dzięki to do spenalzo...
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 10:14 |