URL átírása/átirányítása #-es címre Apache 1.3 alatt
Üdv!
Szeretném ha minden url hívását egy .htaccess átalakítaná olyan módon, hogy a path rész elé biggyeszt egy # jelet (ajaxos hívásokhoz)
tehát:
www.xxxx.hu/user/feri -ből www.xxxx.hu/#user/feri lenne.
Az alábbi kód működik is localhoston XAMPP-al (2.2-es apache), ám szerveren (ahol 1.3-as apache van) végtelen átirányítási hurokba keveredik.
Úgy vettem észre, hogy ez azért történik meg, mert
- www.xxxx.hu/user/feri megérkezik,
- .htaccess átirányítja www.xxxx.hu/#user/feri -ra (ha már van benne # a regexpem szerint érintetlenül hagyja az url-t),
- átirányítás után mivel nincs megadva filenév www.xxxx.hu/index.php-re próbál ugrani, azaz valamiért elveszti a #-es részt. Ugyanezt a 2.2-es xampp-os apachnál megőrzi.
- ezután az url már www.xxxx.hu/index.php megint átirányítja a htaccess, lesz belőle www.xxxx.hu/#index.php
-aminél megint nincs filenév, tehát www.xxxx.hu/index.php-lesz belőle
- és így tovább....
Hogyan lehetne 1.3-as apache alatt ezt a problémát megoldani, már ha a verziószámmal összefügg egyáltalán. Vagy van valamilyen beállítás arra, hogy a #-vel kezdődő rész ne vesszen el ilyenkor?
Van ötletetek?
Köszi szépen!
■ Szeretném ha minden url hívását egy .htaccess átalakítaná olyan módon, hogy a path rész elé biggyeszt egy # jelet (ajaxos hívásokhoz)
tehát:
www.xxxx.hu/user/feri -ből www.xxxx.hu/#user/feri lenne.
Az alábbi kód működik is localhoston XAMPP-al (2.2-es apache), ám szerveren (ahol 1.3-as apache van) végtelen átirányítási hurokba keveredik.
RewriteEngine On
RewriteRule ^(.*[^#]+.*)$ /#$1 [redirect=permanent,last,noescape]
RewriteRule ^(.*[^#]+.*)$ /#$1 [redirect=permanent,last,noescape]
Úgy vettem észre, hogy ez azért történik meg, mert
- www.xxxx.hu/user/feri megérkezik,
- .htaccess átirányítja www.xxxx.hu/#user/feri -ra (ha már van benne # a regexpem szerint érintetlenül hagyja az url-t),
- átirányítás után mivel nincs megadva filenév www.xxxx.hu/index.php-re próbál ugrani, azaz valamiért elveszti a #-es részt. Ugyanezt a 2.2-es xampp-os apachnál megőrzi.
- ezután az url már www.xxxx.hu/index.php megint átirányítja a htaccess, lesz belőle www.xxxx.hu/#index.php
-aminél megint nincs filenév, tehát www.xxxx.hu/index.php-lesz belőle
- és így tovább....
Hogyan lehetne 1.3-as apache alatt ezt a problémát megoldani, már ha a verziószámmal összefügg egyáltalán. Vagy van valamilyen beállítás arra, hogy a #-vel kezdődő rész ne vesszen el ilyenkor?
Van ötletetek?
Köszi szépen!
Miért hagyná érintetlenül
1.3?
Egyébként nézd meg ezt: http://httpd.apache.org/docs/1.3/misc/rewriteguide.html (Extended Redirection rész).
nem win
De nem is biztos hogy apache verziófüggő a dolog, ezzel csak én gyanúsítottam meg.
Megnézem a linket, köszi.
Átirányítás?
#
részt a böngésző nem küldi el a kiszolgálónak, felesleges is ellenőrizni, és nem is az Apache „veszti el”.Elvileg az
index.php
-ra nem volna szabad átugrania a/
címről, nézd meg a válasz fejléceket, szerintem itt van egy átirányítás, ezt kell neked kikapcsolni.2.2
Így van, apache 2.2.9 alatt
egy tetszőleges ilyenből:
http://www.test.dev/url-rewrite/asdfkadf
ilyet csinál:
http://www.test.dev/url-rewrite/#asdfkadf
(Csak annyiban valtoztattam, hogy a tesztes vhostomon konyvtarból megy)
RewriteRule ^(.*[^#]+.*)$ /url-rewrite/#$1 [redirect=permanent,last,noescape]
Csináltam egy szép index.php-t is, az ennél le is fut, kiechoz dolgokat, de nem válik részévé az új url-nek az index.php string.
Lényeg, hogy itt megy.
Élesen
beirom:
http://elesszerver.com/url-rewrite/asdasdf
kihányja:
http://elesszerver.com/url-rewrite/#index.html
Gondolom ott lehet egy DirectoryIndex index.html beállítva, de ez még nem jogosítja fel erre a renitens viselkedésre.
Megnézted?
Meg hát :)
GET 301 Redirect to: http://srv.com/rw/#teve http://srv.com/rw/teve
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#teve
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 Redirect to: http://srv.com/rw/#index.php http://srv.com/rw/#index.php
GET 301 text/html (NS_ERROR_REDIRECT_LOOP) http://srv.com/rw/#index.php
Megoldás
/rw/index.php
(!) esetén ne irányítson át.Köszi! :) Igen, ez tüneti
Igen, ez tüneti kezelés, de egy jó meglátás. Jó volna az okot megszünteti, ami miatt máshogy viselkedik, mint a másik szerveren. Még egy-két kísérlet, aztán legfeljebb marad ez a megoldás.
(A log HttpFox-ból lett kivágva pár oszlopot kihagyva, hogy elférjen itt.)
Nem tüneti
A
/rw/teve
címből csinál/rw/#teve
címet, ami a kiszolgáló szemében/rw/
, amit a mod_dir átír/rw/index.php
-ra, amit a regexed átír/rw/#index.php
-ra, ami viszont a kiszolgáló szemében megint csak/rw/
, amit átír/rw/index.php
-ra stb.A kettes Apache valószínűleg okosabb és magától lekezeli az ilyet.
Nem kell kötekedni :)
Tények
Ahogy fenn már írtam, amikor egérkezik a címed, az elérési út elé bekerül egy kettőskereszt, ami a kiszolgáló szempontjából üres elérési utat jelent, tehát a mod_dir a
DirectoryIndex
irányelvet követve meghívja azindex.php
-t, amire ismét alkalmazva lesz a minta, megint keletkezik egy üres elérési út, és beléptünk a végtelen ciklusba.Ismerve a két modul viselkedését, a regexed logikája hibás. Az, hogy a 2.2-es Apache-on működik, az vagy azt jelenti, hogy létezik egy beállítás, ami globálisan kikapcsolja a minták alkérésekre való alkalmazását, vagy helyetted gondolkodik és nem lép be a ciklusba.
A megoldás vagy az, hogy explicit kihagyatod az
index.php
-t a mintával, vagy használod anosubreq|NS
kapcsolót a végén.Nem a verzió
Jaja Ezért tettem hozzá,
Ezért tettem hozzá, hogy nem biztos, hogy az 1.3-as mivoltából fakadt. És azért jöttem ide eszmét cserélni, mert hátha valakinek lesz ötlete, hogy most béállítás, vagy gonosz manó vagy más szösz van a háttérben.