Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: .htaccess
Forum PHP.pl > Forum > Serwery WWW
m72
Chcę przeprowadzić prace remontowe na mojej stronie i mam teraz zrobione przekierowanie na plik informujący o przerwie...
RewriteEngine On
RewriteCond $1 !^przerwa.html
RewriteRule ^(.*)$ http://mojastrona.pl/przerwa.html [R=302,L]


Jak wykluczyć z przekierowania moje IP ?
trueblue
Kod
RewriteEngine On
RewriteCond $1 !^przerwa.html
RewriteCond %{REMOTE_ADDR} !tu_adres_ip [NC]
RewriteRule ^(.*)$ http://mojastrona.pl/przerwa.html [R=302,L]
el maciaso
Mam podobny problem więc nie chcę otwierać nowego wątku.

Mam na stronie ustawioną w htaccess zamianę polskich znaków na ich odpowiedniki

Kod
RewriteRule ^(.*)ą(.*)$ /$1a$2 [L,R=301]
...
RewriteRule ^(.*)ż(.*)$ /$1z$2 [L,R=301]


Teraz pojawia się problem przy podstronie z tagami, ponieważ konkretny tag sczytuję z parametru w adresie URL. Dlatego przy adresie ".../tagi/&tag=Opłata", adres zmienia mi się na ".../tagi/&tag=Oplata" i otrzymuję tag "Oplata" a nie "Opłata tak jak bym oczekiwał.

Jak mogę wykluczyć całą podstronę "/tagi/" z zamiany polskich znaków? Wpisywanie poszczególnych adresów dla konkretnych tagów trochę się mija z celem ponieważ ich lista rośnie i nie jestem w stanie obsłużyć wszystkich wyjątków.
Zamiana polskich znaków nie może też być wyłączona, gdyż jest niezbędna do przekierowań większości serwisu ze starych adresów URL.
Pyton_000
A nie prościej obsłużyć polskie znaki po stronie skryptu?
el maciaso
Problem w tym że skrypt dostaje string z tagiem już po zamianie z polskich znaków więc pozostaje obsługiwanie wyjątków w skrypcie ("Oplata" = > "Opłata"). Zatem jest to rozwiązanie, którego chciałbym uniknąć.
Pyton_000
Ja mówię w ogóle. po co zamieniać polskie znaki na nie polskie. Wywal te reguły z htaccess i zrób to po stronie serwera, no chyba że masz jakieś uzasadnienie takiej decyzji
el maciaso
Klientowi nie podobało się że przy kopiowaniu linków zamienia polskie znaki na np. "%C4%85", więc chciał żeby nie było polskich znaków w URL'ach. Zamieniłem zatem wszystkie URL'e na takie bez polskich znaków, a zamiana w htaccess miała spowodować że jeśli ktoś będzie miał link do starego adresu to automatycznie przekieruje go na nowy adres bez polskich znaków, zachowując przy tym pozycjonowanie adresów (301).

Jak można by to zrobić za pomocą skryptu, żeby nie ucierpiało SEO?
Pyton_000
musisz przed każdym RewriteRula dać coś na wzór:

RewriteCont ${REQUEST_URI} !^/tag/

Chociaż pewnie wszystkie te reguły które masz dałoby się skrócić i ładniej zrobić, więc może je pokaż.
el maciaso
Reguły które zastosowałem, zamieniające polskie znaki:
Kod
RewriteEngine On
RewriteBase /

RewriteRule ^(.*)ą(.*)$ /$1a$2 [L,R=301]
RewriteRule ^(.*)ę(.*)$ /$1e$2 [L,R=301]
RewriteRule ^(.*)ś(.*)$ /$1s$2 [L,R=301]
RewriteRule ^(.*)ć(.*)$ /$1c$2 [L,R=301]
RewriteRule ^(.*)ó(.*)$ /$1o$2 [L,R=301]
RewriteRule ^(.*)ł(.*)$ /$1l$2 [L,R=301]
RewriteRule ^(.*)ż(.*)$ /$1z$2 [L,R=301]
RewriteRule ^(.*)ź(.*)$ /$1z$2 [L,R=301]


Dodatkowo jest jeszcze reguła niezbędna do prawidłowego działania CMS'a odpowiadająca za Friendly URL
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


Jak można by tu zastosować RewriteCont ?
Pyton_000
Napisałem Ci przecież jak.
el maciaso
Gdy daję przed każdą regułę to co napisałeś
Kod
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ą(.*)$ /$1a$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ę(.*)$ /$1e$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ś(.*)$ /$1s$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ć(.*)$ /$1c$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ó(.*)$ /$1o$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ł(.*)$ /$1l$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ż(.*)$ /$1z$2 [L,R=301]
RewriteCont ${REQUEST_URI} !^/tagi/
RewriteRule ^(.*)ź(.*)$ /$1z$2 [L,R=301]

wywala mi 500 Internal Server Error. Coś robięnie tak?
Pyton_000
RewriteCond zamiast RewriteCont
el maciaso
Mój błąd, przepraszam za zamieszanie.

Niestety poprawienie na RewriteCond nie przynosi pożądanego skutku - cały czas zamienia polskie znaki.
Czy to ja robię coś źle czy po prostu nie można wykluczyć adresu z takiej reguły?
trueblue
Jakie masz kodowanie znaków pliku .htaccess?
el maciaso
UTF-8 bez BOM
trueblue
Zrób kopię i wrzuć na serwer w którymś z: ISO-8859, ASCII, Windows-1250.
el maciaso
Zmiana kodowania powoduje więcej problemów niż pożytku niestety. A jaki ma ono wpływ na te reguły?
trueblue
Jakich problemów?

Podpieram się tym:
Cytat
If file is Utf8-without-BOM, and if you do not use characters with diacritical marks "glāžšķūņrūķīši" then file can be utf8

https://www.sitepoint.com/community/t/file-...htaccess/7880/2
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.