Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][.htaccess] Reguła RewriteRule - zmiana adresów stron
Forum PHP.pl > Forum > Przedszkole
Mazurek
Próbuję zmienić starą adresację
domena.pl/produkt/nazwa-towaru-12345 gdzie nazwa-towaru jest za każdym razem inną nazwą, liczby po myślniku są nieistotne dla nowej adresacji i też zmienne.
na nową
domena.pl/nazwa-towaru.html
Musi zniknąć ciąg losowych znaków liczbowych na końcu oraz produkt . Dopisać należy .html

Stworzyłem dla pliku .htaccess reguły iżadna nie działa :

RewriteRule ^([^-]+).html$ produkt/$1-$2 [L]

RewriteRule ^([^-]+)\.html$ produkt/$1-$2 [L]

RewriteRule ^[a-z0-9\-]\.html$ produkt/$1-

Macie pomysł gdzie jest błąd.
kapslokk
Ale co konkretnie nie dziala? Czy w przypadku starej adresacji liczby po myslniku to nie byl identyfikator towaru, po ktorym aplikacja szukala towaru w bazie danych?
trueblue
A zmieniłeś sposób generacji tych linków w kodzie strony, czy chcesz, aby .htaccess w magiczny sposób je pozmieniał?
Mazurek
Zmieniłem oprogramowanie strony.
Cytat
Ale co konkretnie nie dziala? Czy w przypadku starej adresacji liczby po myslniku to nie byl identyfikator towaru, po ktorym aplikacja szukala towaru w bazie danych?

domena.pl/produkt/nazwa-towaru-12345 gdzie nazwa-towaru jest za każdym razem inną nazwą, liczby po myślniku są nieistotne dla nowej adresacji i też zmienne.

Cytat
A zmieniłeś sposób generacji tych linków w kodzie strony, czy chcesz, aby .htaccess w magiczny sposób je pozmieniał?

Jest nowy skrypt, który pobiera z tej samej bazy SQL towary i musi się zgadzać nazwa-towaru dodatkowo .html w nowej adresacji.

dodatkowo mam inną regułę, która działa na innych stronach innym hostingu a tu te mi nie działa:

Kod
Options +FollowSymLinks +ExecCGI

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteEngine On

RewriteRule ^https://www.DOMENA.com.pl/product/nazwa-towaru-1l-123456$ https://www.DOMENA.com.pl/nazwa-towaru-1l.html
trueblue
Kod
RewriteCond %{REQUEST_URI} ^/produkt/(.*?)-(\d+)
RewriteRule .* /produkt/%1.html [R=301,L]
Mazurek
TRUEBLUE jest progres.
Kod
RewriteCond %{REQUEST_URI} ^/produkt/(.*?)-(\d+)
RewriteRule .* /%1.html [R=301,L]

poprawiłem i zgubiłem słowa produkt Działa dla części adresów.
W adresie starej nazwy mam np nazwa-towaru-piwo-500ml
i skrypt gubi wszystko co jest za liczbą 500 w efekcie zamiast nazwa-towaru-Pwo-500ml otrzymuję tylko nazwa-towaru-piwo
brakuje jakiejś reguły uwzględniającej liczby w adresie
trueblue
Za ostatnim myślnikiem miały być same cyfry. Jaką ostatecznie ma postać stary adres?
Mazurek
adres ma formy:
nazwa-towaru-123456 losowe cyfry
lub najczęściej nazwa-towaru-liczba-123456 przykładowo piwo-marki-zywiec-500ml-bezalholowoe-123456
docelowo musi być piwo-marki-zywiec-500ml-bezalholowoe.html a otrzymuję piwo-marki-zywiec.html bez -500ml-bezalholowoe
czyli skrypt musi ucinać ostatnie liczby
trueblue
Czyli ostatecznie ten przykładowy adres nie kończy się na 500ml.

Kod
RewriteCond %{REQUEST_URI} ^/produkt/(.*?)-(\d+)$
RewriteRule .* /%1.html [R=301,L]
Mazurek
Dziękuję za pomoc w regułach RewriteRule. Mam jednak problem z częścią adresów gdzie w nazwie jest liczba. Ostatecznie ten adres kończy się na myślnik oraz losowe liczby -123456
trueblue
To podaj adres, dla której ostatnia podana przeze mnie reguła nie działa.
Mazurek
Sprawdzam, dodałeś $ na końcu i testuje, jakby działa smile.gif
trueblue
Ostatnia reguła, którą podałem działa poprawnie z takim adresem.
Mazurek
Przegapiłem poprawkę. Działa poprawnie. DZIĘKI x 2 poszło.
Mam jeszcze 1 problem. Na podstawie Twojego kodu podstawiłem sobie do zmiany nazw kategorii:

Kod
RewriteCond %{REQUEST_URI} ^/category/(.*?)-(\d+)
RewriteRule .* /category/%1 [R=301,L]

działa poprawnie i zamienia poprawnie
category/piwo-123456
na
category/piwo

Problem w tym że Google zindeksował mój stary serwis w formie : category/piwo-123456 LUB category/piwo-123456? czasami jest znak zapytania na końcu. I teraz ten znak zapytania się pojawia w nowym adresie . Jak go zgubić?

Mazurek
Mam dodać linię:
RewriteRule ^(.*)$ %{REQUEST_URI}?
lub
RewriteRule ^(.*)$ %{REQUEST_URI} [QSD]
obie linie kodu nie zmienia nic
Kod
RewriteCond %{REQUEST_URI} ^/category/(.*?)-(\d+)
RewriteRule .* /category/%1 [R=301,L]
RewriteRule ^(.*)$ %{REQUEST_URI}?


Tutaj miał ktoś podobny problem Temat: htaccess slash na koncu linka
ale jak dodałem ?$ do kodu:
Kod
RewriteCond %{REQUEST_URI} ^/category/(.*?)-(\d+)
RewriteRule .* /category/%1?$ [R=301,L]

to nie pomogło tylko w adresie wyświetla dodatkowo ?$
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.