Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mod rewrite i problem z linkami...
Forum PHP.pl > Forum > PHP
Mlody993
Witam,
z góry mówię, że jeżeli pomyliłem kategorię to proszę o przeniesienie, nie wiedziałem gdzie to dać.

A więc mam problem, chcę skorzystać z Mod_Rewrite na stronie no i jeden działa, a dwa nie. sad.gif

Mój .htaccess :
RewriteEngine on
RewriteRule ^index,([0-9])$ index.php?set=$1
RewriteRule ^index,([0-9]),([a-zA-Z]+)$ index.php?set=$1&id=$2
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&show=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$5
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6

No i te 2 ostatnie linijki nie chcą działać, sad.gif Co poprawić?
maly_swd
a co to ma byc:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$5
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6

powinno byc:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$4

ale wtedy nie ma sensu bo regulka 1 to to samo co 2

pokaz budowe linku, jaki ma byc obslugiwany przez te 2 ostatnie reguly
Mlody993
No przykładowo mam link:

?set=1&id=info&get=welcome
index,1,info,welcome - bo gdy dam w mod_rewrite / i w link / to mi obrazki się nie wczytują sad.gif

w dwóch ostatnich linijkach jest tak:

?set=1&id=info&get=newsy&pokaz=tytul_newsa
index,1,info,newsy,tytul_newsa

?set=1&id=info&get=polecamy&pokaz=nazwa
index,1,info,polecamy,nazwa

Gdy dam tak te regułki $4 i $4 to też nie działa ;/
maly_swd
?set=1&id=info&get=newsy&pokaz=tytul_newsa
index,1,info,newsy,tytul_newsa

?set=1&id=info&get=polecamy&pokaz=nazwa
index,1,info,polecamy,nazwa

RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$4

pozdaj linka gdzie CI te obrazki zle dzialaja

i wywal to:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&show=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$5
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6
Mlody993
Jak wywalę to:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&show=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$5
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6

To nie będą mi działały dwa działy. ://

Bo zrobione jest to tak...

index.php?set=1&id=info&get=newsy&show=tytul_newsa

No i ta zmienna get otwiera plik newsy, w którym jest kolejna zmienna show i bierze pliki z innego katalogu (w tym przypadku katalog newsy).
W zmiennej get są 3 pliki, które robią kolejną zmienną do innych folerów, nazywają się one newsy, artykuly, polecamy. Ich zmienne to show, pokaz, polecamy.

Co do obrazków, jak mam tak:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6
( index,1,info,polecamy,bleble )

to wszytko działa, obrazki są. A gdy zrobię tak:
RewriteRule ^index/([0-9])/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$6
( index/1/info/polecamy/bleble )

to niestety nie działają obrazki, nie wczytuje ich. sad.gif
erix
  1. przecież masz trzy razy te same wzorce, jak ma rewrite rozróżnić, który masz na myśli? Jasnowidza chcesz z niego zrobić? tongue.gif Wyraź się jasno we wzorcach, to Rewrite przepisze Ci jasno.
  2. Co do obrazków: RewriteCond; poszukaj, bo było nieraz.
Mlody993
W takim razie jak mam poprawić te reguły, aby było dobrze?
erix
Tak, aby nie były wszystkie takie same i parser wiedział, którą masz na myśli.

Żeby Ci lepiej wytłumaczyć, z Twojego kodu:
Kod
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$

Jak widzisz, to są trzy takie same wzorce; skąd interpreter ma wiedzieć, której użyć, skoro są identyczne? Musisz je tak przebudować, aby czymś się różniły adekwatnie do tego, czego potrzebujesz.
Mlody993
Przykładowo:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-z]+)$
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-z0-9+)$

Może być? Wtedy w regułce nr dwa nie będzie żadnych dużych liter, a w regułce 3 otworzą się pliki które mają litery i cyfry (np. bla123)?

@edit:
Teraz mam tak:
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)$ index.php?set=$1&id=$2&get=$3&show=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-zA-Z]+)([0-9]+)$ index.php?set=$1&id=$2&get=$3&pokaz=$4
RewriteRule ^index,([0-9]),([a-zA-Z]+),([a-zA-Z]+),([a-z][0-9][0-9]+)$ index.php?set=$1&id=$2&get=$3&polecamy=$4


No i niestety nie działa. :/ proszę o jakąś pomoc/wskazówkę.
erix
Nie może być, bo nie precyzujesz, o który dział chodzi.

Jak przykładasz miarkę przy budowie domu, to do znanych punktów odniesienia, nie? tongue.gif
Mlody993
Ehh.. już tracę na to silę. biggrin.gif

Proszę o jakąś wskazówkę, bo kombinuje męczę się i nic z tego sad.gif


@edit:
Aha, chyba wiem o co chodzi.

Po prostu zamiast jednego ([a-z-A-Z]+) dać nazwę pliku jaki jest wczytywany ? tongue.gif I on go wczyta?
erix
To nie zabieraj się na to, skoro nie masz cierpliwości. tongue.gif

Twoje wzorce wskazują po prostu na niemal to samo, poczytaj o wyrażeniach regularnych, bo nie mamy bazy, na której moglibyśmy się opierać w dyskusji.
Mlody993
Ale po co ja mam to wszystko czytać jak nawet nie wiem w czym leży problem. :/

Nikt nie ma pomysłu?? :/

Czytałem o tym całym Mod rewrite no i nic :/
erix
Czytałeś? I wiesz chociaż, o czym ja pisałem?
Mlody993
No, że się powtarzają i nie wie o które mi chodzi. ; p

Ale jak to zastąpić innym... Nie mam pomysłu, jak to rozwiązać. :/
erix
No właśnie, nie wie.

Hmm, jak by Ci to inaczej wytłumaczyć... Po pierwsze, kurs rewrite, to podstawa, wyrażeń regularnych też.

Ale zwróć uwagę na coś takiego: ogólnie regexpy mają to do siebie, że nie wyciągają danych "ściśle", tylko jak w wypracowaniach. [; Tzn. w ten sposób, masz np. wyrażenie "spomiędzyA(wyciągnij wszystko, co zawiera litery...)spomiędzyB" - w Twoich trzech wzorcach jest 3x: "spomiędzyA(wyciągnij wszystko, co zawiera litery...)" - pierwszy wzorzec spełni wszystkie trzy przypadki, gdyż nawet jak wstawisz "spomiędzyB" do sprawdzanego ciągu (nie wzorca!), to spełni on warunki pierwszego przypadku i nie będzie co przetwarzać w następnych.

Co musisz zrobić: musisz przerobić wzorce tak, aby każdy z nich miał inną kanwę, w naszym przypadku: ma różnić się tym "spomiędzyX", co - podpowiedź - ma u Ciebie wskazywać na konkretny dział.
Mlody993
Nie no nie mogę... :/ Chyba sobie to odpuszczę. :/
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.