Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RewriteRule
Forum PHP.pl > Forum > Serwery WWW > Apache
nospor
Hej,
mam aplikacje, w niej w głównym katalogu plik .htaccess i chciałbym dokonać następujących zmian:

Kod
url/jakistekst  -------na: url/?m=jakistekst
url/jakistekst/jakistekst2  -------na: url/?m=jakistekst&a=jakistekst2


No i gdy przyjme narazie ze chce tylko pierwszą zamiane:
Kod
RewriteRule (.+) ?m=$1
To dziala. Ale gdy dorzucę drugą:
Kod
RewriteRule (.+) ?m=$1
RewriteRule (.+)/(.+) ?m=$1&a=$2

To oczywiscie jakby nie bral jej pod uwagę i adres:
url/jakistekst/jakistekst2 zamienia na ?m=jakistekst/jakistekst2

Zmiana kolejności rewritów też nie daje oczekiwanego porządku.
webdice
Nie wiem czy Cię dobrze zrozumiałem, ale jeśli chcesz aby po wpisaniu /url/jakis_tekst móc się odnosić do zmiennych m oraz a, to napisz tak:

Kod
RewriteRule ([^/]+) ?m=$1
RewriteRule ([^/]+)/([^/]+) ?m=$1&a=$2


Jeśli chcesz aby po wpisaniu url/jakis_tekst pojawiało się ?m=jakis_tekst itp... to dodaj flagę R.
nospor
Dzieki, ale zadzialalo cos takiego:
Kod
RewriteRule (.+)/(.+) ?m=$1&a=$2 [L]
RewriteRule (.+) ?m=$1

Tym razem nie laduja sie jednak cssy do strony. Dorobilem wiec:
Kod
rewritecond %{REQUEST_FILENAME} !^.*/css/.*$
I na poczatku dzialalo, a potem znowu przestalo. sad.gif

ps: twoje reguly nie dzialaja
webdice
Sprobuj tak:

Kod
RewriteEngine On
    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
    
RewriteRule ^([^/]+)$         index.php?m=$1      [L]
RewriteRule ^([^/]+)/([^/]+)$ index.php?m=$1&a=$2 [L]


EDIT: Co do css, działa Ci przy URL/tekst, a nie działa przy URL/tekst/tekst2 ? Jeśli tak to ustaw base href.
nospor
Ok, juz lepiej. Reguły chwyta już dobrze, ale gorzej z cssami.
Gdy tam url/jakistekst to Łyknie css, ale gdy dam url/jakistekst1/jakistekst2 to juz css nie podłączy do strony

edit:
Cytat
EDIT: Co do css, działa Ci przy URL/tekst, a nie działa przy URL/tekst/tekst2 ? Jeśli tak to ustaw base href.

No coż, już nie działa css dla żadnego. Nie czaje tego, dzialalo dla jednego az nagle przestało dla kazdego.

zaczynam siwiec w zastraszającym tempie...
webdice
Przykładowo mając plik main.css i otwierając stronę www.serwer.pl/tekst, plik main.css jest pobierany z www.serwer.pl/main.css, a jeśli podasz www.serwer.pl/tekst/tekst2 plik css jest pobierany z adresy www.serwer.pl/tekst/main.css, żeby tego uniknąć podaje się w pliku html coś takiego:

  1. <base href="http://www.serwer.pl/[ewentualnie_nazwe_katalogu/]">


Jeśli to nie zadziała pokaż więcej kodu.
nospor
Dodalem base i dalej nic.

Teraz gdy mam te rewriterule, to nawet gdy wpisuje adresy, ktore nie sa lykanie przez rewrite rule, to css sie nie laduje.

Cytat
Jeśli to nie zadziała pokaż więcej kodu.
Byc moze bedzie to lamerskie pytanie, no ale zwazywszy na późną pore sie odważę:
o jakim kodzie mowisz? za bardzo nie wiem co cię może interesowac. php? html? jesli tak, to ktora czesc smile.gif

edit: wystarczy ze wyrzuce jeden rewrite, np ten:
RewriteRule ^([^/]+)$ index.php?m=$1 [L]
to css zaczyna dzialac
ale gdy sa oba naraz to nie dziala
webdice
Może najpierw ja podam trochę kodu:

.htacess
Kod
RewriteEngine On
RewriteBase /
# tu pamiętaj że jeśli masz aplikacje w jakimś folderze, napisz RewriteBase /path/
    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
    
RewriteRule ^([^/]+)$ index.php?m=$1 [L]
RewriteRule ^([^/]+)/([^/]+)$ index.php?m=$1&a=$2 [L]


index.php
  1.  
  2. <base href="http://localhost/">
  3.  
  4. <link type="text/css" rel="stylesheet" href="main.css" />
  5.  
  6. </head>
  7. <?php print_r ($_GET); ?>
  8. </body>


main.css
Kod
body
{
    background-color: #800000;    
}


Wszystko jest w tym samym katalogu (w katalogu głównym serwera). Jeśli trzymasz to w jakimś podkatalogu to dodaj RewriteBase /nazwa_katalogu/ oraz w <base href="http://serwer.pl/nazwa_katalogu/" />
nospor
Ok, jesli robie jak mowisz, to dziala. Potem zagniezdzam sciezki, czyli wchodze glepiej, tez dziala.

No a na mojej aplikacji nie dziala. No i dopiero wtedy dolukalem roznice miedzy tym co podajesz, a tym co mam. U ciebie index.php, .htaccess i main.css, lezą w tym samym katalogu. U mnie pliki css, leza jeszcze w katalogu css. Zalozylem wiec i u ciebie katalog css i do niego wrzucilem main.css i juz nie poszlo.
Oto Twoja struktura po mojej modyfikacji:
Kod
index.php
.htaccess
css/main.css


.htaccess:
Kod
RewriteEngine On
RewriteBase /
    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
    
RewriteRule ^([^/]+)$ index.php?m=$1 [L]
RewriteRule ^([^/]+)/([^/]+)$ index.php?m=$1&a=$2 [L]


index.php
  1. <html>
  2. <head>
  3.  
  4. <base href="http://localhost/">
  5. <link rel="stylesheet" href="css/main.css" type="text/css" />
  6.  
  7. </head>
  8. <body>
  9. <?php print_r ($_GET); ?>
  10. </body>
webdice
Kod
RewriteEngine On
RewriteBase /
    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
  
RewriteRule ^([^/]+)$         index.php?m=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]+)/([^/]+)$ index.php?m=$1&a=$2 [L]
nospor
Dałbym se głowę uciąć, iż wczoraj tak próbowałem blinksmiley.gif

No nic, działa. Dzięki wielkie smile.gif

ps: znasz jakiś dobry tutorial na to wszystko?
dr_bonzo
nospor: w manualu sa podstawy teoretyczne, w jakiej kolejnosci to jest sprawdzane, opis znacznikow, rewritebase. Regexpy to regexpy. A przyklady mozna w necie znalezc
nospor
Cytat
A przyklady mozna w necie znalezc
No ba, szukałem i dużo mi to nie dało.
Chyba zaczynam się uwsteczniać winksmiley.jpg
nospor
Fajne linki, dzięki. Powoli zaczynam kumać o co w tym biega smile.gif

edit: no to lecim dalej
Kod
url/jakistekst1/jakistekst2/par1:val1.html

zamienic na:
Kod
url/?m=jakistekst1&a=jakistekst1&par1=val1

No to jest dosyc proste:
Kod
RewriteRule ^([^/]+)/([^/]+)/([^:]+):([^:]+)\.html$ ?m=$1&a=$2&$3=$4 [L]

ale, tych par1:val1 moze byc do bolu, i odzielonych ::, czyli:
Kod
url/jakistekst1/jakistekst2/par1:val1::par2:val2::....parn:valn.html

i zamienic to na:
Kod
url/?m=jakistekst1&a=jakistekst1&par1=val1&par2=val2.....&parn=valn

I tu mam problem. Pewnie jakąś ladną rekurencje, ale jakoś mi się to nie widzi.
em1X
Koledzy problem mam podobny. Mi także się sypie po dodaniu kończącego slasha. Ale co jest najśmieszniejsze. Base jest ustawiony. Firefox ma taką kontrolkę "Informacje o stronie". Tam jest np zakładka z odnośnikami na danej stronie.

Są podane dwie pozycje css z href'ami takimi, jakie powinny być - czyli działającymi. Ale te css w ogóle się nie ładują dzięki czemu mam surowy html na stronie lol. Strona jest w katalogu jednak zabawa w RewriteBase nic nie dała.


Mam już dość :/ przykład:

http://mojekontakty.com.pl/ogloszenia/dodaj - z CSS
http://mojekontakty.com.pl/ogloszenia/dodaj/ - bez CSS

.htaccess
Kod
RewriteEngine On

RewriteRule ^dodaj/?$ index.php?module=Add
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.