Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z przekierowaniami 301
Forum PHP.pl > Forum > Serwery WWW > Apache
ClouD
Witam.
Mam nadzieję że jak przedstawię problem komuś kto się na tym zna to otrzymam pomoc, bo sam jakoś zaczynam się już gubić.

Zależy mi aby przekierować dany adres dynamiczny na przyjazny alias utworzony w pliku .htaccess.

Mój plik wygląda następująco

{
RewriteEngine On
RewriteRule ^([^-]+).html$ /index.php?a=$1 [NC]
RewriteRule ^zdrowie-i-uroda/([0-9]+)/?$ /index.php?cPath=21 [NC]
RewriteCond %{HTTP_HOST} ^http://www.dominatura.pl/index.php?cPath=21
RewriteRule (.*) http://www.dominatura.pl/zdrowie-i-uroda/$2 [R=301,L]

}

Próbowałem już na różne sposoby i tak jak mówiłem pogubiłem się. ^^" W tym fragmencie chciałem żeby po wpisaniu adresu w wyszukiwarkę "www.dominatura.pl/index.php", wtedy zostanie przekierowany na "www.dominatura.pl", natomiast w gdy wejdzie w dział "http://www.dominatura.pl/index.php?cPath=21", wtedy przekieruje na "www.dominatura.pl/zdrowie-i-uroda/21". Sam jakoby alias tego działu działa natomiast przekierowanie 301 nie.

Proszę o pomoc i pozdrawiam.
bełdzio
try

Kod
RewriteCond %{HTTP_HOST} ^dominatura.pl/index.php?cPath=21
RewriteRule ^(.*)$ http://www.dominatura.pl/zdrowie-i-uroda/21 [R=301,L]
erix
HTTP_HOST zawiera wyłącznie nazwę domenową serwera.
bełdzio
hmmm fakt :]

Cytat
RewriteRule index.php\?cPath=21 /zdrowie-i-uroda/21 [R=301,L]


powinno lepiej sobie poradzic smile.gif
erix
A nie lepiej dać dwa warunki?
Zamiast:
Kod
RewriteCond %{HTTP_HOST} ^http://www.dominatura.pl/index.php?cPath=21

dać
Kod
RewriteCond %{HTTP_HOST} dominatura.pl
RewriteCond %{QUERY_STRING} cPath=21
RewriteRule ...


wyrażenia do dostosowania
ClouD
Wygląda na to że działa, tylko że przekierowanie zapętla się.

CODE

RewriteEngine On
RewriteRule ^zdrowie-i-uroda/([0-9]+)/?$ /index.php?cPath=21 [NC,L]
RewriteCond %{HTTP_HOST} dominatura.pl
RewriteCond %{QUERY_STRING} cPath=21
RewriteRule ^(.*)$ http://www.dominatura.pl/zdrowie-i-uroda/21 [R=301,L]

erix
Pierwsze RewriteRule przenieś na koniec.
ClouD
Dalej to samo.

Pasek adresu wygląda tak
CODE
http://www.dominatura.pl/zdrowie-i-uroda/21?cPath=21
.
erix
Dodaj RewriteCond na REQUEST_URI i sprawdzaj, czy jest nowo przepisywana wartość w adresie.
ClouD
Jeżeli to miało wyglądać tak:

CODE

RewriteEngine On
RewriteCond %{HTTP_HOST} dominatura.pl
RewriteCond %{QUERY_STRING} cPath=21
RewriteCond %{REQUEST_URI} !http://www.dominatura.pl/index.php?cPath=21 [NC]
RewriteRule ^(.*)$ http://www.dominatura.pl/zdrowie-i-uroda/21 [R=301]
RewriteRule ^zdrowie-i-uroda/([0-9]+)/?$ /index.php?cPath=21 [NC,L]



To nadal się zapętla.
Czyli jeżeli dobrze rozumiem działanie ostatniego warunku, to adres wywoływany zostaje niezmieniony.
erix
RewriteCond działa tylko dla jednego RewriteRule.
ClouD
questionmark.gif
CODE
RewriteEngine On
RewriteCond %{HTTP_HOST} dominatura.pl
RewriteCond %{QUERY_STRING} cPath=21
RewriteCond %{REQUEST_URI} !http://www.dominatura.pl/index.php?cPath=21 [NC]
RewriteRule index.php\?cPath=21 /zdrowie-i-uroda/21 [R=301,L]
RewriteCond %{REQUEST_URI} !http://www.dominatura.pl/index.php?cPath=21 [NC]
RewriteRule ^zdrowie-i-uroda/([0-9]+)/?$ /index.php?cPath=21 [NC,L]



Teraz nic się nie dzieje.
To znaczy nie zapętla się i przekierowanie nie działa.

Zamieniłem pierwszy RewriteRule na ten bez (.*)

^^'
Czy to co chce zrobić jest takie trudne do zrobienia czy nikt nie wie jak to zrobić?
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.