Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

mod_rewrite [OT, Crosspost]

0 views
Skip to first unread message

jkdas

unread,
Nov 13, 2009, 3:29:19 AM11/13/09
to
Ostatnio w mojej stronie wprowadzi�em przyjazne adresy typu
www.mojadomena.com/pl/aaa.html kt�re s� tak naprawd� odwo�aniem do
www.mojadomena.com/index.php?lang=pl&strona=aaa
Ta cze�� dzia�a bez zarzutu.

Gdy wpisze w przegl�darce www.mojadomena.com/pl/aaa.html lub
www.mojadomena.com/index.php?lang=pl&strona=aaa to pojawia siďż˝ ta sama
strona.

Teraz chcia�bym zablokowa� "brzydkie" adresy
www.mojadomena.com/index.php?lang=pl&strona=aaa pozostawiaj�c jedynie
www.mojadomena.com/pl/aaa.html G��wnie zale�y mi na usuni�ciu brzydkich
adres�w z wyszukiwarek a pozostawieniu tylko �adnych.


Zawarto�� pliku .htaccess

1. RewriteEngine on
2. RewriteRule !^(en|pl)(\/)?(\/(.*)\.html)?$ 404.html [NS,NC,L]
3. RewriteRule ^(en|pl)(\/)?(\/(.*)\.html)?$ index.php?lang=$1&strona=$4
[NC,L]

Gdy dodaj� linijk� 2. to nie dzia�a nic, wszystko jest przepisywane na
404.html
Przecie� je�li adres pasuje do 3. to nie pasuje do 2. Jednak i tak �adne
adresy s� blokowane przez regu�� 2.

Dlaczego, co robi� �le? Jak inaczej mog� osi�gn�� sw�j cel?

Koteczek

unread,
Nov 13, 2009, 8:13:06 AM11/13/09
to

> 1. RewriteEngine on
> 2. RewriteRule !^(en|pl)(\/)?(\/(.*)\.html)?$ 404.html [NS,NC,L]
> 3. RewriteRule ^(en|pl)(\/)?(\/(.*)\.html)?$
> index.php?lang=$1&strona=$4 [NC,L]


brzydkie przekieruj na ladne:

RewriteRule ^_________?$ http://%{HTTP_HOST}/________ [R=301,L,NC]

Redirect 301

a co do problemu wyzej to hmm no ciekawe, a moze zmien kolejnosc 2-3?
NS co robi? L to last, NC to chyba bylo ze ma ignorowac wielkosc litery?

jkdas

unread,
Nov 13, 2009, 8:32:10 AM11/13/09
to
Koteczek pisze:

>
>> 1. RewriteEngine on
>> 2. RewriteRule !^(en|pl)(\/)?(\/(.*)\.html)?$ 404.html [NS,NC,L]
>> 3. RewriteRule ^(en|pl)(\/)?(\/(.*)\.html)?$
>> index.php?lang=$1&strona=$4 [NC,L]
>
>
> brzydkie przekieruj na ladne:
>
> RewriteRule ^_________?$ http://%{HTTP_HOST}/________ [R=301,L,NC]
>
> Redirect 301

Mog� i przekierowa�, nawet lepiej bo googole i ludzie nie zb��dz�.
Jednak podstaw� jest regu�ka kt�ra to zrobi, a teraz wyczerpa�y si� ju�
moje pomys�y.


> a co do problemu wyzej to hmm no ciekawe, a moze zmien kolejnosc 2-3?

Nic nie daje, nadal sďż˝ eliminowane wszystkie.

> NS co robi? L to last, NC to chyba bylo ze ma ignorowac wielkosc litery?

'nosubreq|NS' (not for internal sub-requests)
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule

NS mia�o nie by� w regu�ce, by�o dodane w ramach test�w, jednak te� nic
nie zmienia�o.

Koteczek

unread,
Nov 13, 2009, 10:47:10 AM11/13/09
to
w sumie regulka to bedzie odwrotnosc tej co juz masz ;-)? Ale nie pomoge
dokladnie bo jestem cienki z wyrazen :-(

W dodatku jesli parametry w GET byly raz w takiej kolejnosci a raz w innej to
tez ciezka praca...

jkdas

unread,
Nov 13, 2009, 11:00:26 AM11/13/09
to
jkdas pisze:

> Ostatnio w mojej stronie wprowadzi�em przyjazne adresy typu
> www.mojadomena.com/pl/aaa.html kt�re s� tak naprawd� odwo�aniem do
> www.mojadomena.com/index.php?lang=pl&strona=aaa
> Ta cze�� dzia�a bez zarzutu.
>
> Gdy wpisze w przegl�darce www.mojadomena.com/pl/aaa.html lub
> www.mojadomena.com/index.php?lang=pl&strona=aaa to pojawia siďż˝ ta sama
> strona.
>
> Teraz chcia�bym zablokowa� "brzydkie" adresy
> www.mojadomena.com/index.php?lang=pl&strona=aaa pozostawiaj�c jedynie
> www.mojadomena.com/pl/aaa.html G��wnie zale�y mi na usuni�ciu brzydkich
> adres�w z wyszukiwarek a pozostawieniu tylko �adnych.

Odpu�ci�em sobie mod_rewrite i zrobi�em w php. To przynajmniej dzia�a

if ( preg_match(
'/\/index\.php\?(lang=(pl|en)&?)?(strona=([a-z0-9]*))?/i',
$_SERVER['REQUEST_URI'], $matches) ) {
$url = 'http://domena.com/';
if ( !empty($matches[2]) ) {
$url .= $matches[2] . '/';
}
else {
$url .= 'pl/';
}

if ( !empty($matches[4]) ) {
$url .= $matches[4] . '.html';
}

header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$url);
exit();
}

0 new messages