Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z htaccess Wersje językowe i Nice URL NoSpor-a
designez
post 14.08.2018, 14:14:33
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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]

Ten post edytował designez 14.08.2018, 14:18:26
Go to the top of the page
+Quote Post
nospor
post 14.08.2018, 15:33:09
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6289
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
designez
post 14.08.2018, 16:28:26
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
trueblue
post 14.08.2018, 16:49:50
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
designez
post 14.08.2018, 17:27:00
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
trueblue
post 14.08.2018, 22:20:50
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
designez
post 17.08.2018, 08:26:48
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


Ehh faktycznie mam 2 funkcje do sprawdzania URL i wykorzystałem tą złą. Warunek zawsze spełniony czeski błąd smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 08:17