Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> rewrite rule, numer parametru wiekszy niz 9
wojto
post 23.10.2004, 09:50:35
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


witam,
mam podany kod w pliku .htaccess:
Kod
RewriteRule ^szukaj,(.*),(.*),([0-9]+),([0-9]+),(.*),(.*),(.*),(.*),(.*),([0-9]+).html+ szukaj.php?sz_slowo_kluczowe=$1&sz_nazwa=$2&sz_branza=$3&sz_wojewodztwo=$4&sz_powiat=$5
&sz_miejscowosc=$6&sz_telefon=$7&sz_ulica=$8&sz_nr_domu=$9&strona=$10
jak widac na zalaczonym obrazku liczba parametrow wynosi 10

W czym problem.
Nie przesyla parametru $10. Zamiast niego dostaje wartosc parametru $1 plus 0
Czy jest mozliwosc, aby odczytac wartosc parametru nr 10?

W dokumentacji jest napisane cos takiego:
Cytat
"Back-references are $N  (N=0..9) identifiers which will be replaced
by the contents of the Nth group of the matched Pattern."
czyli parametry moga byc od 0 do 9
Jak uzyskac dostep do parametru $0, ktora czesc linka to bedzie?

gdzies znalazlem inny cytat, zeby:
Cytat
use multiple RewriteRule statements chained together [C] if you need
more.
ale nie wiem co da to [C]

z gory dzieki za pomoc.

Ten post edytował wojto 23.10.2004, 12:48:40


--------------------
Go to the top of the page
+Quote Post
hwao
post 23.10.2004, 10:17:58
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




php pocz -> serwery
Go to the top of the page
+Quote Post
akubiczek
post 23.10.2004, 11:36:34
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


Ten post powinien ci wyjaśnić zasadę łączenia: http://tiny.pl/fs9

Próbowałem jednak stworzyć działający przykład twojego problemu i nie udało mi się. smile.gif Daj znać jak coś wymyślisz.


--------------------
pozdrawiam, Adam Kubiczek
kubiczek.eu
Go to the top of the page
+Quote Post
wojto
post 23.10.2004, 13:11:47
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


niestety, ale dalej nie wiem jak to zrobic, probowalem dac {$10} oraz ${10}, a takze: [C],[N],[C,QSA] i dalej nic


--------------------
Go to the top of the page
+Quote Post
bendi
post 25.10.2004, 08:14:01
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


a rozwazales przypadek ze regulka mzoe byc zle napisana, bo wg mnie tak sie wlasnie stalo. Chodzi o kropke i gwiazkdke.

Mianowicie jest ogromna roznica miedzy zapisem

.* oraz .*? Wiecej informacji tutaj

[edit] Ok doczytam manuala. [/edit]

Ten post edytował bendi 25.10.2004, 12:32:21


--------------------
Go to the top of the page
+Quote Post
akubiczek
post 25.10.2004, 08:36:55
Post #6





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


Bendi, reguła jest dobra tylko naprawdę jest tak, że mod_rewrite obsługuje max. do 9 parametrów. Poza tym regexpy mod_rewrite mają kilka drobnych różnic w stosunku do tych z php.


Wojto: chyba nie zapoznałeś się z postem, który ci wskazałem tongue.gif Nie masz używać żadnego {$10} ponieważ N jest maks. 9. Musisz za to pokombinować z kolejnymi zamianami, tak jak w przykładzie. Schemat działania jest taki:

1. bierzesz URLa i zamieniasz pierwszy parametr, a wszystkie pozostałe kopiujesz
[C,QSA]
2. powtarzasz krok 1 dla wszystkich parametrów

chodzi o to, że w jednej regule zamieniasz tylko jeden parametr (możesz oczywiście od razu zamienić 9, ale dla uproszczenia róbmy to kolejno). Dla 10 parametrów tworzysz 10 regułek, w których używasz tylko parametru $1 . Każda następna regułka dostaje efekt pracy swojej poprzedniczki.

Nie wiem jak to inaczej wytłumaczyć. W wolnej chwili postaram ci się napisać działający przykład.


...kilka godzin później....

Masz:

Kod
RewriteEngine on
RewriteRule ([^,\.]+),(.*) p1=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p2=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p3=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p4=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p5=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p6=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p7=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p8=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p9=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&p10=$2 [C]
RewriteRule (.*)\.html szukaj.php?$1


Piwo Rkingsmiley.png

Ten post edytował akubiczek 25.10.2004, 16:05:51


--------------------
pozdrawiam, Adam Kubiczek
kubiczek.eu
Go to the top of the page
+Quote Post
bendi
post 26.10.2004, 08:45:03
Post #7





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


2 sprawy:

- gdzie w tym kodzie nalezy dodac QSA, bo z tego co mi sie wydaje aby regulka byla skopiowana trzeba to dopisac
- zamiast pisac ([^,\.]+), mozna napisac (.*?),. Wywolanie ze znakiem zapytania spowoduje wlalczenie non-greedy (niby roznica nieznaczna, ale o ile czytelniejsza - pobierz wszystko do pierwszego napotkanego przecinka i po sprawie), wiecej na ten temat w drugiej czesci mojego arta o regexpach

Wtedy cala regulka przyjmie postac:
Kod
RewriteEngine on
RewriteRule (.*?),(.*) p1=$2 [C]
RewriteRule (.*?),(.*) $1&p2=$2 [C]
RewriteRule (.*?),(.*) $1&p3=$2 [C]
RewriteRule (.*?),(.*) $1&p4=$2 [C]
RewriteRule (.*?),(.*) $1&p5=$2 [C]
RewriteRule (.*?),(.*) $1&p6=$2 [C]
RewriteRule (.*?),(.*) $1&p7=$2 [C]
RewriteRule (.*?),(.*) $1&p8=$2 [C]
RewriteRule (.*?),(.*) $1&p9=$2 [C]
RewriteRule (.*?),(.*) $1&p10=$2 [C]
RewriteRule (.*?)\.html szukaj.php?$1

Prawda ze ladniej ;>

Ten post edytował bendi 26.10.2004, 08:45:44


--------------------
Go to the top of the page
+Quote Post
akubiczek
post 26.10.2004, 09:03:08
Post #8





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


ślicznie smile.gif

QueryStringAppend (QSA) nie używałem, bo nie doczytałem jak to się dokładnie zachowuje smile.gif Przy zwykłym łączeniu Chain [C] też działa dobrze, przekazując wynik regexpa do kolejnej regułki. Sprawdzone w praktyce.

No, myślę że rozwiązaliśmy problem kolegi Wojto smile.gif

Ten post edytował akubiczek 26.10.2004, 09:04:25


--------------------
pozdrawiam, Adam Kubiczek
kubiczek.eu
Go to the top of the page
+Quote Post
wojto
post 31.10.2004, 20:57:32
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

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


Cytat(akubiczek @ 2004-10-26 10:03:08)
No, myślę że rozwiązaliśmy problem kolegi Wojto smile.gif

zgadza sie smile.gif
juz poradzilem sobie wczesniej poprzez zmniejszenie liczby parametrow, ale klient dodal nowe, wiec jednak musialem z tego skorzystac
ps. ten sposob podany przez ciebie bendi u mnie nie dziala, nie znajduje strony, wyswietla 404.
ten
Kod
RewriteRule ([^,\.]+),(.*) sz_slowo_kluczowe=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_nazwa=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_branza=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_wojewodztwo=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_powiat=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_miejscowosc=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_telefon=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_ulica=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_osob=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&strona=$2 [C]
RewriteRule (.*)\.html szukaj.php?$1
dziala jak nalezy


// edit: jednak nie dziala jak nalezy, bo wszystkie nastepne linki w tym pliku (dokladniej te zawierajace przecinek) juz nie obsluguje wcale

przykladowy kawalek pliku:
Kod
RewriteRule ^firma,([0-9]+).html+ firma.php?id=$1
RewriteRule ^szukaj.html+ szukaj.php

RewriteRule ([^,\.]+),(.*) sz_slowo_kluczowe=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_nazwa=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_branza=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_wojewodztwo=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_powiat=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_miejscowosc=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_telefon=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_ulica=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&sz_osob=$2 [C]
RewriteRule ([^,\.]+),(.*) $1&strona=$2 [C]
RewriteRule (.*)\.html szukaj.php?$1

[CODE]RewriteRule ^dodaj.html+ dodaj.php?rejestracja=1
RewriteRule ^aktualizuj.html+ dodaj.php?rejestracja=2
RewriteRule ^edytuj,([0-9]+).html+ edytuj.php?id=$1
RewriteRule ^usun,([0-9]+).html+ usun.php?id=$1

w tym fragmencie tych dwoch:
Kod
RewriteRule ^edytuj,([0-9]+).html+ edytuj.php?id=$1
RewriteRule ^usun,([0-9]+).html+ usun.php?id=$1

juz nie obsluguje
jakies sugestie?

Ten post edytował wojto 31.10.2004, 21:07:04


--------------------
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: 14.06.2025 - 08:30