pavobe
(Pavobe Reg)
28 Maj 2008 15:57
#1
Chcę uzyskać prosty efekt:
/coś to index.php?page=coś
/coś/inne to index.php?page=coś&subpage=inne
+oczywiście przekierowanie, jeżeli nie ma końcowego /.
Nie mogę się połapać w regułach mod rewrite, daję kod, który wyprodukowałem jakoś sam :P.
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([a-zA-Z]+)/([a-zA-Z]+)$ /$1/$2/ [R]
RewriteRule ([a-zA-Z]+)/$ /$1/ [R]
RewriteRule ([a-zA-Z]+)/$ index.php?page=$1
RewriteRule ([a-zA-Z]+)/([a-zA-Z]+)/$ index.php?page=$1&subpage=$2
Zmienne są na pewno dobrze odbierane przez skrypt. W przykładzie z jedna zmienna po / chyba mi się zapętla reguła, w drugim pierwsza zmienna zawsze wynosi “php” o.O.
adpawl
(adpawl)
28 Maj 2008 16:12
#2
A nie wystarczy?
Options FollowSymLinks SymLinksIfOwnerMatch
RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)$ index.php?page=$1&subpage=$2 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
pavobe
(Pavobe Reg)
28 Maj 2008 16:19
#3
Podczas 2 zmiennych bez ostatniego / FF wypluwa:
Czyli chyba zapętlanie, ale nie che mi się wierzyć - przecież to najprostszy przykład :lol:.
adpawl
(adpawl)
28 Maj 2008 16:40
#4
…aaa, a czy przypadkiem tutaj slash nie powinien być poprzedzony backslashem?
RewriteRule ^([a-zA-Z]+)\/([a-zA-Z]+)$ index.php?page=$1&subpage=$2 [L]
pavobe
(Pavobe Reg)
28 Maj 2008 16:53
#5
Teraz jeszcxe większy kibel:
/a przekierowuje na /a/ - dobrze, ale 404,
/a/b przekierowuje na /b/ - źle, 404
reszta ręcznie wpisywana to 404.
adpawl
(adpawl)
28 Maj 2008 17:16
#6
nie qmam…
Co Ty właściwie chcesz zrobić? przekierowanie czy przyjazny adres?
Zakładając że to drugie, to w przypadku reguł które podałem:
wpisując w przeglądarce url: http://localhost/a ** /b’>http://localhost/a /b**
w pliku testowym index.php o treści:
<?php
echo 'page: '.$_GET['page'].'
subpage: '.$_GET['subpage'];
?>
dostaję:
page: a
subpage: b
-czyli ok.
wpisując adres: http://localhost/a
dostaję:
page: a
subpage:
-czyli też ok
Więc?
pavobe
(Pavobe Reg)
28 Maj 2008 17:38
#7
Chcę stworzyć przyjazj=ne URLe (takie amatorskie :P).
Po wpisaniu /a przekierowuje na /a/ (czyli dobrze), ale dostaję 404 nie wiem dlaczego.
adpawl
(adpawl)
28 Maj 2008 17:44
#8
No to co ty powpisywałeś do tego .htaccess ?
Wklej jego aktualną zawartość.
pavobe
(Pavobe Reg)
28 Maj 2008 18:03
#9
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([a-zA-Z]+)$ /$1/ [R]
RewriteRule ([a-zA-Z]+)/([a-zA-Z]+)$ /$1/$2/ [R]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z]+)\/([a-zA-Z]+)$ index.php?page=$1&subpage=$2 [L]
adpawl
(adpawl)
28 Maj 2008 18:35
#10
A co ja pisałem wcześniej?
Nic dziwnego że wyskakuje 404 jak przez te pierwsze niezwykle pomysłowe przepisania odsyła do nieistniejącej lokalizacji :x
Całość ma wyglądać tak:
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteRule ^([a-zA-Z]+)\/([a-zA-Z]+)$ index.php?page=$1&subpage=$2 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
pavobe
(Pavobe Reg)
28 Maj 2008 18:45
#11
/aaa/bbb/ nadal wypluwa 404… (ale bez końcowego / jest dobrze, lecz tak też powinno działać).
adpawl
(adpawl)
28 Maj 2008 18:59
#12
No to zmień np. na:
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteRule ^([a-zA-Z]+)\/([a-zA-Z]+)([/])$ index.php?page=$1&subpage=$2 [L]
RewriteRule ^([a-zA-Z]+)([/])$ index.php?page=$1 [L]
pavobe
(Pavobe Reg)
28 Maj 2008 20:26
#13
OK, działa, ale i tak muszę zrobić te “swoje przekierowania”, aby zmienne działały bez końcowego /. Już więcej nic nie potrzebuję. W razie czego wiem, że błąd jest w przekierowaniach.
Dziękówka.
Airborn
(Airborn)
28 Maj 2008 20:32
#14
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteRule ^([a-zA-Z]+)\/([a-zA-Z]+)([/]?)$ index.php?page=$1&subpage=$2 [L]
RewriteRule ^([a-zA-Z]+)([/]?)$ index.php?page=$1 [L]
to powinno działać, niezależnie od tego, czy / na końcu jest, czy go nie ma, nie jestem nawet pewien czy potrzebne są ostatnie nawiasy, niestety nie mam możliwości sprawdzenia w tej chwili
pavobe
(Pavobe Reg)
31 Maj 2008 15:43
#15
Działa idealnie.
Muszę się wziąć za wyrażenia regularne :).
W dniu 31.05.2008 , o godzinie 17:43 został dopisany post przez pavobe
Post pod postem, ale już nikt tutaj nie zagląda…
W jaki sposób pozwolić na - (myślniki) w nazwach zmiennych w adresie?
adpawl
(adpawl)
31 Maj 2008 20:42
#16
Dopisujesz go w kwadratowym nawiasie:
DirectoryIndex blank.txt blank.html blank.html index.txt index.htm index.html index.php
RewriteEngine On
RewriteRule ^([a-zA-Z-]+)\/([a-zA-Z-]+)([/]?)$ index.php?page=$1&subpage=$2 [L]
RewriteRule ^([a-zA-Z-]+)([/]?)$ index.php?page=$1 [L]