Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z htaccess Wersje językowe i Nice URL NoSpor-a
Forum PHP.pl > Forum > Przedszkole
designez
Hej mam problem z przekierowaniem kod 1 używałem do tej pory wszelkie redirect tworzą loop detected kiedy headerem przekierowuje na wersję językową choć link fizycznie istnieje. Chcę zrobić to po stronie htaccess i tutaj działa 2 kod wykrywa wersję językową i przekierowuje. Problem jest kiedy chcę mieć funkcjonalność NICE URL i nie działa. Nie cierpię htaccess testowałem wiele rozwiązań i nic nie działa. Mam NICE URL Nospor-a i jak wrzucam https://domena.pl/pl/link,8.html to wszystko działa więc tutaj jest przygotowane. Chcę automatycznie przekierować użytkownika na konkretną wersję językową która bez parametrów wygląda tak https://domena.pl/pl/

Pozdrawiam


mam taki oto kod htaccess


RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]

i taki 2 wersje językowe

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ https://www.%{HTTP_HOST}/pl/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ https://www.%{HTTP_HOST}/pl/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ https://www.%{HTTP_HOST}/pl/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ https://www.%{HTTP_HOST}/pl/ [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^pl [NC]
RewriteRule ^$ https://www.%{HTTP_HOST}/pl/ [L,R=301]



RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(en|de|nl|fr|pl)/?$ index.php?/$1/ [L]
nospor
Kod ktory jest w moim przykladzie nice url nie obslugiwal jezykow bo to byl tylko przyklad by pokazac jak samodzilenie mozna zrobic nice url. Moj przyklad dzialal tylko dla paru przykladowych kombinacji url takie jak podane przez ciebie /link,8.html

Jak chcesz dodac teraz jezyk to nie masz juz grzebac w .htaccess - na tym polegal wlasnie przyklad ode mnie, ze .htaccess sluzyl tylko do ogolnego przekierowania a wszystko inno mialo byc robione w php. Tak wiec jezyki masz obsluzyc rowniez w php w przykladowej klasie NiceUrl
designez
Ja przerobiłem na kilka kombinacji dla artykułów, podstron czy czegokolwiek jak np ogłoszenia pliki ładuje tak
domena.pl/nice-url,p,78.html
Gdzie P jest typem (modułem) w tym przypadku podstrona zrobiłem też dla kategorii i wersji językowych kategorie + wersje językowe problem jest taki że kiedy odpalam stronę
domena.pl/pl/nice-url,p,78.html działa wszystko fajnie
ale kiedy chcę przekierować HEADEREM na dokładnie taki link pojawia się problem. Chcę aby automatycznie po wejściu strona przekierowała się na odpowiednią wersję językową.

Parametr wersji językowej jest zapisywany i tutaj jest dlatego myślałem że problem leży po stronie htaccess ok problem mam z przekierowaniem na konkretną wersję językową i mimo że link jest prawidłowy to pojawia mi się LOOP DETECTED

Poniższym sprawdzam wersję językową i przekierowuje w postaci domena.pl/pl/
  1. $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
trueblue
A po tym jak przekierujesz na domena.pl/pl/, to co się dzieje? Nie sprawdzasz znów zmiennej $_SERVER['HTTP_ACCEPT_LANGUAGE'] i przekierowujesz ponownie?
Przekierowanie powinieneś wykonać kiedy REQUEST_URI jest pusty, albo w adresie pojawił się język, który nie jest obsługiwany.
designez
Tak to też zrobiłem na razie chcę przebrnąć przez etap choć z domeny na domena.pl/pl/ potem będę się zastanawiał dalej.
Mam taki oto błąd ERR_TOO_MANY_REDIRECTS. Próbowałem różne wersje header-a /pl/ domena.pl/pl/ to samo

  1. function getBaseUrl()
  2. {
  3. $currentPath = $_SERVER['PHP_SELF'];
  4.  
  5. // output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index )
  6. $pathInfo = pathinfo($currentPath);
  7. $hostName = $_SERVER['HTTP_HOST'];
  8. $protocol = 'https';
  9. return $protocol.'://'.$hostName;
  10. }
  11.  
  12. echo getBaseUrl();
  13. echo '<br>';
  14. echo Config::$siteURL;
  15. echo '<br>';
  16. if (getBaseUrl()==Config::$siteURL) {
  17. $lc = "";
  18. if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
  19. $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
  20.  
  21.  
  22.  
  23. switch ($lc) {
  24. case 'pl':
  25. header("location: ".Config::$siteURL."/pl/");
  26. exit();
  27. break;
  28.  
  29. default:
  30. # code...
  31. break;
  32. }
  33. }
trueblue
Cytat(designez @ 14.08.2018, 18:27:00 ) *
Tak to też zrobiłem na razie chcę przebrnąć przez etap choć z domeny na domena.pl/pl/ potem będę się zastanawiał dalej.
Mam taki oto błąd ERR_TOO_MANY_REDIRECTS. Próbowałem różne wersje header-a /pl/ domena.pl/pl/ to samo

Co takiego zrobiłeś? W kodzie widać warunek oparty o https://domena.pl (to zawsze zwraca getBaseUrl) oraz Config::$siteURL. Jeśli więc są takie same, to zawsze wykonujesz switch/case.
Sugerowałem Ci wyżej, abyś przekierowanie robił tylko kiedy brak wersji językowej.
designez
Ehh faktycznie mam 2 funkcje do sprawdzania URL i wykorzystałem tą złą. Warunek zawsze spełniony czeski błąd smile.gif
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.