Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z mod_rewrite
Ozzy
post 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:)
Go to the top of the page
+Quote Post
spenalzo
post 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".


--------------------

Go to the top of the page
+Quote Post
Ozzy
post 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)
Go to the top of the page
+Quote Post
Ozzy
post 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...
Go to the top of the page
+Quote Post
Ozzy
post 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:)
Go to the top of the page
+Quote Post
Ozzy
post 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.
Go to the top of the page
+Quote Post
MaKARON
post 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
}
Go to the top of the page
+Quote Post
dooshek
post 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 smile.gif


--------------------
"Use the force - read the source"
Go to the top of the page
+Quote Post
spenalzo
post 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.


--------------------

Go to the top of the page
+Quote Post
Ozzy
post 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.
Go to the top of the page
+Quote Post
Ozzy
post 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?smile.gif
Go to the top of the page
+Quote Post
Ozzy
post 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.
Go to the top of the page
+Quote Post
Ozzy
post 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ę.
Go to the top of the page
+Quote Post
scanner
post 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...


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post

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: 25.04.2024 - 10:14