Skocz do zawartości

mod_rewrite, przekierowanie i polskie znaki


Prysiu
 Udostępnij

Rekomendowane odpowiedzi

Hej!

Chcę przekierować stronę https://www.przyklad....żółć_Gęślą_Jaźń na https://www.przyklad....zolc-gesla-jazn - obie strony są identyczne, od strony serwera to to samo, adresy wygenerowane (w cakephp) routerem i slugiem (w obu przypadkach różnym).

W normalnej sytuacji po prostu bym utworzył nowe adresy, a stare wywalił. Niestety stare są już podlinkowane i z pewnością dużo bym przez to stracił w wyszukiwarkach.

Jako, że z przekierowaniem adresów z polskimi znakami w htaccess sobie nie poradziłem (to w ogóle możliwe?) to wymyśliłem, że przekieruję strony 1:1 filtrując je po powtarzalnym ciągu "186". Więc...

Mam w .htaccess regułę:


RewriteEngine On
RewriteBase /
RewriteRule ^.*/186/.*$ https://www.przyklad.pl/kategoria/186/test-zazolc-gesla-jazn [R=301,L,QSA]

I o dziwo od strony "widzialnej" działa, ponieważ adres generowany jest prawidłowo. Jednak zamiast strony pojawia się błąd 404 (sprawdziłem literówki ;) )

Help!

Ty też terefere!

Szkolenia językowe dla firm

Odnośnik do komentarza
Udostępnij na innych stronach

Nie do końca rozumiem o co w tym ma chodzić, ale jak jest serwis oparty o cakephp możesz dowolne przekierowanie zrobić w PHP w Router, w kontrolerze czy nawet w pliku index.php

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Ustawienie przekierowania w PHP powoduje powstanie pętli przekierowania.

Ustawienie przez kogo <pytanie retoryczne> ?... Zapewniam cię, że prawidłowa implementacja nie spowoduje żadnych zapętleń.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Już się domyśliłem, że moja jest nieprawidłowa ;), a że siedzę nad tym od rana, to liczyłem na więcej wędki od mądrzejszych ode mnie. Próbowałem już wielu kombinacji, bo zwykle zadaję pytanie w ostateczności, gdy problem mnie przerasta.

Może to wina wersji Cake'a? 1.2.5

Niestety serwis był stawiany przez kogoś innego i teraz grzebanie w nim (serwisie) to chodzenie po cienkim lodzie.

Ty też terefere!

Szkolenia językowe dla firm

Odnośnik do komentarza
Udostępnij na innych stronach

Czasem zdarza się tak że w różnych wersjach apache rewrite działa nieco inaczej (powodując problemy z przekierowaniem).

Odnośnik do komentarza
Udostępnij na innych stronach

nad tym od rana, to liczyłem na więcej wędki od mądrzejszych ode mnie.
W zmiennej: $_SERVER["REQUEST_URI"]; będziesz miał adres/ciąg z żądania GET i na bazie tego możesz:

- na sztywno napisać warunki if()  301-> adres docelowy  ;
- if(polskie_znaki) funkcja_zmianiejąca_url_bez_pl(url_z_pl)  301 -> adres docelowy ;
- if(dopasowani_do_wzorca) funkcja_zmianiejąca_url_bez_pl(url_z_pl)  301 -> adres docelowy ;

w htaccess możesz jedynie zrobić przekierowanie na sztywno z -301-> na wpisując wszystkie url do przepisania.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Tworzenie osobnego skryptu okazało się niepotrzebne.

Udało mi się dynamicznie zmieniać postać linków z poziomu Controllera. Wszystko za pomocą wbudowanych funkcji Cake'a.

Dla przyszłych szukających, działający w moim przypadku kod:

...
if ( eregi('_',$slug) ) {
$this->redirect('/kategoria/'.$id.'/'.Inflector::slug($slug),301);
} else {
...

Coś polecacie do stosowania zamiast eregi()? Bo podobno już wychodzi z użycia :)

Ty też terefere!

Szkolenia językowe dla firm

Odnośnik do komentarza
Udostępnij na innych stronach

preg_match https://takien.com/51...n-php-5-3-0.php

---

I co @Prysiu - szło zrobić jak pisałem :dirol:

Edytowane przez Mion

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności