Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z mod_rewrite
Forum PHP.pl > Forum > Serwery WWW > Apache
Ozzy
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:)
spenalzo
Jeżeli użyasz mod_rewrite to musisz do obrazków, JSów i innych dać adres bezwględny, np. "/img/costam.gif".
Ozzy
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)
Ozzy
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...
Ozzy
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:)
Ozzy
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.
MaKARON
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
}
dooshek
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 smile.gif
spenalzo
A napisz jaki chcesz osiagnąć efekt - to znacyz, co zamienić na co.
Ozzy
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.
Ozzy
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?smile.gif
Ozzy
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.
Ozzy
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ę.
scanner
Wiem, że jestem popularny i uwielbiany, ale te dzięki to do spenalzo...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.