Autor Zpráva
DJ Miky
Profil
Zdravím,
zkouším na svém webu udělat mod_rewrite, aby odstraňoval (= přesměrovával 301 na adresu bez nich) znaky jako tečku, čárku, závorky,... na konci adresy (např. když někdo napíše odkaz na konci věty a udělá se odkaz i s tou tečkou). Nějak se mi to ale nedaří...

Nevíte někdo, jak to udělat?

Děkuji za návrhy.
Anonymní
Profil *
http://www.jakpsatweb.cz/server/mod_rewrite/mod-rewrite-priklady.html# oprava_adresy
DJ Miky
Profil
Díky, trochu jsem to upravil a funguje to, až na případ, kdy jsou za adresou tečky:
adresa. - funguje
adresa.. - přepne se do vyššího adresáře
adresa... - skončí 403 Forbidden

To znamená, že to asi interpretuje ty tečky (. = akt. adresář, .. = nadřazený adresář atd.) - jak na to?

Pravidlo jsem upravil takto:
RewriteRule ^(.*)([\.\?\),!"'])+$ /$1 [R=301,L]

(to původní nefungovalo)
Kajman_
Profil *
A odkomentoval jste RewriteBase a správně nastavil (asi na /)?

Uvedený příklad jsem se snažil řádně otestovat a fungoval, jak je tam popsáno - tedy bez problému odstranil dvě tečky na konci jedním krokem.
DJ Miky
Profil
zkoušel jsem to s RewriteBase i bez něj, stejný výsledek - nejde to.
Při zadání absolutní adresy do RewriteBase server nahlásí 500 ISE.

To samé dělá i na původní verzi příkladu (bez úprav).
Kajman_
Profil *
Při zadání absolutní adresy do RewriteBase server nahlásí 500 ISE.

Absolutní adresy? Co tam dáváte? Nevím, nějak se mi tomu nechce věřit, radši jsem to teď ještě testoval na pár strojích a funguje to bez problémů.

#obsah pro .htaccess umístěný v kořenu webu
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*[^\.\?\),!-"'])[\.\?\),!-"']+$
RewriteRule ^(.*)$ $1?%1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^(.*[^\.\?\),!-"'])([\.\?\),!-"'])+$ $1 [R=301,L]

Je možné, že to nefunguje, ale prostě se mi tomu nechce moc věřit ;-)
DJ Miky
Profil
Opravdu pořád nefunguje, pořád stejný problém... Asi se na to vykašlu... Ale díky za Váš čas.

S RewriteBase / nebo bez RewriteBase, pořád to samé.
Regulární výraz jsem zkoušel taky už asi 10krát přepisovat, bezvýsledně...

Ještě to zkusím otestovat na jiném Apache (1.3 a 2.2).

EDIT 21:25 - tak na Apache 1.3 ten samý problém:
/neco/neco/.. - přesměruje se na /neco/
/neco/neco.html.. - tohle se pro změnu nepřepíše vůbec
Kajman_
Profil *
/neco/neco/.. - přesměruje se na /neco/

To je správně... to by měl udělat už sám prohlížeč.


A kde ty pravidla uvádíte v .htaccess nebo rovnou v konfiguráku apache? Tam by samozřejmě RewriteBase němělo co dělat.
DJ Miky
Profil
Kajman_
Můžete mi vysvětlit, jaktože je správně přesměrování /neco/neco/.. na /neco/? Díky.

Vše dávám do .htaccess.
Kajman_
Profil *
Můžete mi vysvětlit, jaktože je správně přesměrování /neco/neco/.. na /neco/? Díky.

http://www.faqs.org/rfcs/rfc2396.html

5.2 6) f)

If the buffer string ends with "<segment>/..", where <segment>
is a complete path segment not equal to "..", that
"<segment>/.." is removed.
Toto téma je uzamčeno. Odpověď nelze zaslat.