Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> RewriteRule
nospor
post 26.05.2007, 21:02:18
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 26.05.2007, 21:08:28
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.

Ten post edytował webdicepl 26.05.2007, 21:09:55
Go to the top of the page
+Quote Post
nospor
post 26.05.2007, 21:24:10
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 26.05.2007, 21:25:29
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.

Ten post edytował webdicepl 26.05.2007, 21:31:44
Go to the top of the page
+Quote Post
nospor
post 26.05.2007, 21:36:19
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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...


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 26.05.2007, 21:43:22
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post
nospor
post 26.05.2007, 21:58:12
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 26.05.2007, 22:03:27
Post #8


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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/" />
Go to the top of the page
+Quote Post
nospor
post 26.05.2007, 22:30:00
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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>


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 26.05.2007, 23:09:46
Post #10


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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]


Ten post edytował webdicepl 26.05.2007, 23:12:15
Go to the top of the page
+Quote Post
nospor
post 27.05.2007, 10:04:31
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post 27.05.2007, 11:21:27
Post #12





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


nospor: w manualu sa podstawy teoretyczne, w jakiej kolejnosci to jest sprawdzane, opis znacznikow, rewritebase. Regexpy to regexpy. A przyklady mozna w necie znalezc


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
nospor
post 27.05.2007, 11:44:16
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
webdice
post 27.05.2007, 12:05:49
Post #14


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
http://home.pl/pomoc/kursy/rewrite
http://maxprogram.pl/readarticle.php?article_id=10
http://sf.jogger.pl/2007/05/02/mod-rewrite-w-przykladach/

Kilka ciekawych rzeczy można się dowiedzieć.

Ten post edytował webdicepl 27.05.2007, 12:07:11
Go to the top of the page
+Quote Post
nospor
post 28.05.2007, 13:07:58
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
em1X
post 5.10.2007, 19:36:46
Post #16





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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


Ten post edytował em1X 5.10.2007, 19:37:55


--------------------
eh, co polska wódka to polska wódka
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: 21.07.2025 - 07:25