Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Serwery WWW _ htaccess - przekierowania z użyciem regex do regex?

Napisany przez: phpamator 19.03.2019, 17:59:14

Panowie/Panie,
tak wiem, wciaż jakieś idiotyczne pytania zadaję ale ...
Ma problem z którym nie bardzo potrafię sobie poradzić, mianowicie z jakiegoś powodu moje Magento generuje co jakiś czas nowe urle więc dodaję sobie co chwilę kolejna listę żeby działało bez wywalania 404.
Jest to trochę irytujace i pomyślałem czy można by w jakiś sposób zmusić htaccess do działania. Nie jest to problem jeśli np zmienia się jakiś element url'a np inkrementuje liczbę dodawana na końcu url'a.
RedirectMatch daje rade ale kiedy url nie daje się np przekierować bo /kategoria/strona-10/ nie może być przekierowana do /strona.html ponieważ takowa nie istnieje, istnieje za to /strona-10.html.
Niestety każdorazowa zmiana url'a to kolejny redirect 301 /kategoria/strona-numer/ do /strona-numer.html

Zapytacie o co pytam .... czego chcę ....
czy istnieje jakaś możliwość ustawienia przekierowania w taki sposób, że zmiana /kategoria-numer/ będzie zawsze równało się /strona-numer.html ?
Bo przecież nie mogę RedirectMatch 301 /kategoria/strona-(\d{3})/ /strona-(\d{3}).html bo wywalę stronę albo dostanę 404.

Da się to jakoś obejść ?


Napisany przez: trueblue 19.03.2019, 18:03:19

Kod
RewriteCond %{REQUEST_URI} ^/kategoria/strona-(\d{3})/
RewriteRule ^.*$ http://domena.pl/strona-%1.html [R=301,L]

Napisany przez: phpamator 20.03.2019, 11:04:05

aaaaaaah trublue wielgachne dzięki, nie ogarnłdane@edpa.cmo.uk

Aaaaaaah trueblue wielgachne dzięki, nie ogarnałem jeszcze tego zagadnienia.
Już będę wiedział na przyszłość jak się do tego zabrać.
Dziękuję

Edyta:
Nie wiem co źle zrobiłem ... miałem wrażenie, że działa ale okazało się, że nie ...
wpisałem oczywiście opatrzone tagami <IfModule mod_rewrite.c> ...
dziś rano, okazało się, url znowu się zmienił ale już przekierowanie nie zadziałało. sad.gif

tak działa: Redirect 301 /browse/sale-51/ /sale-51.html?dir=asc&order=position
a tak nie:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/browse/sale-(\d{3})/
RewriteRule ^.*$ https://mojadomena.pl/sale-%1.html?dir=asc&order=position [R=301,L]
</IfModule>

Why ?

Napisany przez: trueblue 21.03.2019, 11:11:55

A jakich wartości dotyczy wzorzec \d{3}?

Napisany przez: phpamator 28.03.2019, 12:22:26

Ooo hej trueblue,
Przepraszam, nie zaglądałęm od kilku dni.
Wartości jakie się tam pojawiają to jak narazie dwu cyfrowe liczby a dlaczego ?
Czyżby błąd polegał na \d{3} zamiast \d{2} ?
A co jeśli ilość wygenerowanych url'i przekroczy 99 ?
wtedy zmienić ma \d{3} ?
A nie można zdefiniować zakresu on 1 do 1000 ?
Czyli powinienem poprostu zmienić \d{1,4} i będzie aż do 9999 ..... ?
ale wtopa

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)