Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] mod rewrite, niedzialajaca regula
gazelek
post 3.08.2008, 16:00:41
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

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


Na wstepie: mod rewrite na pewno jest wlaczone, bo wszystkie inne reguly dzialaja, za wyjatkiem tych dwoch:
Kod
RewriteRule ^rejestracja/([0-9])$ rejestracja.php?code=$1 [L]
RewriteRule ^wydarzenie/([^-])$ wydarzenie.php?id=$1[L]


Kod pliku rejestracja.php:
Kod
<?php
print "Oto kod: $_GET[code]";
?>

Po wpisaniu adresu http://localhost/~mojastrona/rejestracja/12345 powienienem dostac napis "Oto kod:12345", a otrzymuje "Oto kod:". Konstrukcja pliku wydarzenie.php jest analogiczna. Gdzie jest moj blad? Dodam, ze jesli regule skonstruuje np tak:
Kod
RewriteRule ^rejestracja,([0-9]).html$ rejestracja.php?code=$1 [L]

to wszystko dziala jak nalezy. Nie chce miec jednak takiej postaci jak powyzej, bo to wogole nie ma sensu, juz lepiej zostawic linki tak jak sa.... Pozdrawiam i dziekuje za pomoc!
Go to the top of the page
+Quote Post
neverever
post 3.08.2008, 16:15:42
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


$_GET[code] powinno a być $_GET['code']
([0-9]) a gdzie podany zakres? powinno być np. ([0-9]+) albo ([0-9]{5}) itp. -inaczej reguła będzie dotyczyła JEDNEJ cyfry.

Ten post edytował neverever 3.08.2008, 16:16:33


--------------------
neverever
Go to the top of the page
+Quote Post
gazelek
post 3.08.2008, 16:33:07
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

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


Cytat(neverever @ 3.08.2008, 17:15:42 ) *
$_GET[ code] powinno a być $_GET['code']


Nie rozumiem, co to znaczy. Specjalnie wpisalem pierwsza konstrukcje, bo po wpisaniu drugiej kod sie wykrzacza (cudzyslow w cudzyslowiu)

Cytat(neverever @ 3.08.2008, 17:15:42 ) *
([0-9]) a gdzie podany zakres? powinno być np. ([0-9]+) albo ([0-9]{5}) itp. -inaczej reguła będzie dotyczyła JEDNEJ cyfry.


No tak, zapomnialem o zakresie. Mimo wszystko nie dziala - ale zaobserwowalem ciekawa rzecz:
Kod
RewriteEngine On
RewriteBase /
RewriteRule ^rejestracja/([^-]+)$ rejestracja.php?code=$1 [L]
RewriteRule ^wydarzenie/([^-]+)$ wydarzenie.php?id=$1[L]
RewriteRule ^([^-])$ show.php?action=$1 [L]

Taki plik dziala (ostatnia regula tylko dziala, ale to nic). Natomiast jesli w ostatniej linijce doloze plusa:
Kod
RewriteRule ^([^-]+)$ show.php?action=$1 [L]

To przestaja dzialac dwie pierwsze reguly - nie wyswietla sie strona, tylko error404...

Ten post edytował gazelek 3.08.2008, 16:33:56
Go to the top of the page
+Quote Post
neverever
post 3.08.2008, 17:05:53
Post #4





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


bo to miało być:
Kod
RewriteRule ^rejestracja/([0-9]+)$ rejestracja.php?code=$1 [L]
RewriteRule ^wydarzenie/([^-]+)$ wydarzenie.php?code=$1 [L]

i
  1. <?php
  2. echo 'Oto kod: '.$_GET['code'];
  3. ?>


zauważ, że przed [L] ma być spacja!

A i jeszcze jedno, nie powinieno być takich folderów jak rejestracja i wydarzenie, ale to chyba wiesz.

Ten post edytował neverever 3.08.2008, 17:07:58


--------------------
neverever
Go to the top of the page
+Quote Post
gazelek
post 3.08.2008, 17:27:24
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

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


Dzieki, ze Ci sie wogole chce...Szukalem jeszcze na wlasna reke i intryguje mnie ciagle, czemu regula z przecinkami dziala (opisalem powyzej) a z plotkami (/) za cholere :/ probowalem na zewnetrznym serwerze, tez lipa. Skopiowalem gotowe reguly z dzialajacej strony i nic. Jeszcze jedno mi sie nasuwa. Czy nie powinienem umiescic w drugiej linijce .htaccess czegos takiego:
Kod
RewriteBase /~mojastrona

? Chodzi o katalog, w ktorym zostala umieszczona strona.

Wyglada na to, ze na moim serwerze jest jakas nadrzedna regula. Jesli w adres poda sie localhost/rejestracja, to on przed .htaccess sprawdzi swoje reguly i dopisze na koncu '.php'. Nie wiem, chyba mi zostaja przecinki. Nie rozumiem wogole, czemu to nie chce dzialac, gdzie jest blad. Nawet gotowe, dzialajace, sprawdzone reguly sie sypia na moim WebServie 2.0...

Ten post edytował gazelek 3.08.2008, 17:34:08
Go to the top of the page
+Quote Post
neverever
post 3.08.2008, 17:35:33
Post #6





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


RewriteBase - to zależy od konfiguracji serwera i takich tam, najczęściej działa bez, a niekiedy musisz zadeklarować.

Sprawa wyglada tak, że skoro z przecinkami działa a ze slashami nie, to albo masz takie katalogi albo może trzeba slasha poprzedzić backslashem czyli zamiast / dać \/


--------------------
neverever
Go to the top of the page
+Quote Post
gazelek
post 3.08.2008, 17:46:49
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

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


Zrobilem tak: skopiowalem sobie gotowy plik .htaccess ktory dziala na serwerze u znajomego, obluguje jego strone. Wyglada to tak (fragment):
Kod
RewriteEngine on
RewriteBase /~mojastrona/
RewriteRule ^gadzety/([0-9]+)$ show.php?id=$1

Stworzylem plik show.php, ktory nie robi nic, tylko wypisuje zawartosc tablicy $_GET - i co? Po wywolaniu localhost/~mojastrona/gadzety/9 otrzymuje strone o zawartosci '9'. Teraz dopisuje swoja regule:
Kod
RewriteRule ^register/([0-9]+)$ rejestracja.php?id=$1


edit: teraz zczailem - po zmianie rejestracja na register zaczelo dzialac - w zwiazku z tym nazwa reguly nie moze byc taka sama jak nazwa pliku...chyba winksmiley.jpg

I zadzialalo smile.gif Dzieki wielkie za pomoc smile.gif

Ten post edytował gazelek 3.08.2008, 18:00:16
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: 24.07.2025 - 13:51