konto usunięte

Temat: Regex w RewriteRule

Witajcie,
poprawiam ostatnio pewien, dość stary serwis internetowy i zaszła potrzeba stworzenia dwóch regułek w .htaccess:

RewriteRule ^(.*)/([0-9]*)/([0-9]*)/(.*)-([0-9]*)\.html$ index.php?modul=$1&kat=$2&subkat=$3&strona=$5

RewriteRule ^(.*)/([0-9]*)/([0-9]*)/([0-9]*)/(.*)\.html$ index.php?modul=$1&kat=$2&subkat=$3&produkt_id=$4

Adres listy z produktami: /modul/id_kategorii/id_podkategorii/sup3r-t0w4r-[numer strony].html

Adres konkretnego produktu: /modul/id_kategorii/id_podkategorii/id_produktu/nazwa-produktu.html

I sprawa jest taka, że adres listy produktów śmiga (var_dump($_REQUEST) pokazuje poprawnie wszystkie parametry i wartości), natomiast nie działa poprawnie przepisywanie dla tego drugiego adresu. Dodam, że po zakomentowaniu pierwszej regułki ta druga działa już poprawnie. Wniosek taki, że regułki "gryzą" się między sobą, czy ktoś widzi błąd?

konto usunięte

Temat: Regex w RewriteRule

Zamień je kolejnością.

konto usunięte

Temat: Regex w RewriteRule

To było pierwsze co zrobiłem, niestety nie pomogło.

konto usunięte

Temat: Regex w RewriteRule

RewriteRule ^(.*)/([0-9]+)/([0-9]+)/(.*?)-([0-9]+)\.html$ index.php?modul=$1&kat=$2&subkat=$3&strona=$5 [L]

RewriteRule ^(.*)/([0-9]+)/([0-9]+)/([0-9]+)/(.*?)\.html$ index.php?modul=$1&kat=$2&subkat=$3&produkt_id=$4 [L]

piszę z palca więc może być nadal błąd

konto usunięte

Temat: Regex w RewriteRule

Fakt.
Jest jednak gorzej - regułki pięknie działają... jak są same.
Ergo - błąd jest gdzieś indziej.

Dodaj [L] na końcu każdej z regułek?Michał Wachowski edytował(a) ten post dnia 04.05.11 o godzinie 00:44

konto usunięte

Temat: Regex w RewriteRule

Bez zmian. Teraz tak się zastanawiam, czy tego końcowego (.*) w pierwszej regułce nie zamienić na coś konkretnego, do którego będą pasowały napisy w adresie (znaki a-z, A-Z, 0-9 i "-"), ale póki co nie udało mi się jej napisać poprawnie - głownie kończy się to 500-tką. Może dlatego, że późno :)

konto usunięte

Temat: Regex w RewriteRule

Wklej może całość pliku... bo błąd może tkwić w innym miejscu.

konto usunięte

Temat: Regex w RewriteRule

U mnie działa bez zarzutu moja regułka. Tak jak pisze Michał, wklej zawartość i najlepiej konkretny request jaki wysyłasz.

konto usunięte

Temat: Regex w RewriteRule

adres: sklep/6/5/artykuly-sypkie-1.html
var_dump($_REQUEST):


array(6) {
["modul"]=> string(5) "sklep"
["kat"]=> string(1) "6"
["subkat"]=> string(1) "5"
["strona"]=> string(1) "1"
}


adres: sklep/6/5/1/zyto.html
var_dump($_REQUEST):


array(6) {
["modul"]=> string(9) "index.php"
["kat"]=> string(1) "6"
["subkat"]=> string(1) "5"
["produkt_id"]=> string(1) "1"
}


Problemem jest niepoprawny moduł, tylko nie mam pojęcia dlaczego.
W kodzie nie ma nic skomplikowanego, żadnych przekierowań itp, jak będzie potrzebny to zamieszczę później.

konto usunięte

Temat: Regex w RewriteRule

Coś tu kręcisz ;) Wklej aktualny .htaccess - cały :)

konto usunięte

Temat: Regex w RewriteRule

1) wykorzystaj to co dał Łukasz jako podstawę
2) zoptymalizuj (np. wywal te niepotrzebne wyrażenia zachłanne)
3) możesz nawet połączyć obie regułki w jedną, bo masz 90% podobieństwo
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Regex w RewriteRule

Michał Wachowski:
Dodaj [L] na końcu każdej z regułek?

[L] w .htaccess nie działa/nie zawsze działa. To należy stosować raczej na poziomie plików .conf, np. przy konfiguracji virtualhosta
Maciej W.

Maciej W. Ruby on what?!

Temat: Regex w RewriteRule

Bartosz Ratajczyk:
Michał Wachowski:
Dodaj [L] na końcu każdej z regułek?

[L] w .htaccess nie działa/nie zawsze działa. To należy stosować raczej na poziomie plików .conf, np. przy konfiguracji virtualhosta

Rozwiniesz to jakos? W dokumentacji Apache nic o tym nie widze, a chetnie poczytam.
Z tego co wiem to nalezy tylko uwazac, bo jesli uzywamy rewrite w htaccess to po spelnieniu warunku wysylany jest sub-request ktory znow moze wpac na htaccess i ktoras z regul i tak w kolko (pomimo uzycia flag L).

http://httpd.apache.org/docs/current/rewrite/flags.htm...
http://httpd.apache.org/docs/current/rewrite/tech.html...Maciej W. edytował(a) ten post dnia 04.05.11 o godzinie 11:34

konto usunięte

Temat: Regex w RewriteRule

Tymczasowo pomogło wpisanie modułów "na sztywno":

RewriteRule ^(sklep|produkty)/([0-9]*)/([0-9]*)/(.*)-([0-9]*)\.html$ index.php?modul=$1&kat=$2&subkat=$3&strona=$5

i działają obydwie regułki.
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Regex w RewriteRule

Maciej W.:
Rozwiniesz to jakos? W dokumentacji Apache nic o tym nie widze, a chetnie poczytam.

Postaram się znaleźć i wkleić linki do tego posta. Generalnie jak szukałem informacji dlaczego nie działają moje reguły z flagą L to znalazłem w końcu satysfakcjonującą odpowiedź bodaj na stackoverflow, gdzie dalej linkowało do treści artykułu na blogu, gdzie było wyjaśnione to na przykładach. Ale ogólnie jest jak piszesz - ponowne wywołanie .htaccess.

Jedna ze stron z wyjaśnieniami to np. http://www.colder.ch/news/01-26-2007/24/truth-about-th...

Edit:
Możliwe, że chodziło mi m.in. o te linki - wygrzebałem z historii i zakładek
http://stackoverflow.com/questions/3640194/how-do-i-ge...
http://stackoverflow.com/questions/1775877/apache-mod-...Bartosz Ratajczyk edytował(a) ten post dnia 04.05.11 o godzinie 21:03
Marek Surma

Marek Surma Twórca aplikacji
internetowych.

Temat: Regex w RewriteRule

Rafał Wilmanowicz:
adres: sklep/6/5/artykuly-sypkie-1.html
var_dump($_REQUEST):


array(6) {
["modul"]=> string(5) "sklep"
["kat"]=> string(1) "6"
["subkat"]=> string(1) "5"
["strona"]=> string(1) "1"
}


adres: sklep/6/5/1/zyto.html
var_dump($_REQUEST):


array(6) {
["modul"]=> string(9) "index.php"
["kat"]=> string(1) "6"
["subkat"]=> string(1) "5"
["produkt_id"]=> string(1) "1"
}

Witaj,

Taka sytuacja może przytrafić się w przypadku, gdy podasz coś w stylu:
sklep/6/5/1/zyto-3.html

Czyli modul/kat/subkat/produkt_id/nazwa-strona.html

Wiadomo, że kombinacja gdzie podajesz zarówno produkt_id jak i strone nie ma prawa bytu przy tych regułach.

Sprawdź czy gdzieś takiego kwiatka nie masz.
Jeżeli masz, to masz już odpowiedź! I właśnie po usunięciu Twojej pierwszej regułki nagle taki adres zacznie "poprawnie" działać.

Daj znać czy pomogło :)

Pozdrawiam!
Mirosław Ratman

Mirosław Ratman Manager IT,
Architekt systemów
@Avast, Founder
@aSyncro ...

Temat: Regex w RewriteRule

Regułki "na czysto" działają bez zarzutu. Jak tu pisano - nie masz jeszcze czegoś w htaccesie ?

Przy okazji - nie lepiej uzyc [0-9]+ zamiast [0-9]* ?

Podobne tematy


Następna dyskusja:

Niedziałający RegEx




Wyślij zaproszenie do