Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] mod rewrite, niedzialajaca regula
Forum PHP.pl > Forum > Przedszkole
gazelek
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!
neverever
$_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.
gazelek
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...
neverever
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.
gazelek
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...
neverever
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ć \/
gazelek
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
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.