ugrás a tartalomhoz

mod_rewrite a jelszóval védett alkönyvtárra is

KergeKacsa · 2006. Júl. 11. (K), 22.35
Sziasztok!

A következő a gondom: Vagy egy .htaccess fájl, amiben ilyesmik vannak:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([0-9]*)$
RewriteRule ^show\.php$    /tortenet/%2? [R=301,L]
RewriteRule ^cikk/([0-9]*) /index.php?name=news&id=$1
RewriteRule ^szerzok/      /index.php?name=szerzok
RewriteRule ^szerzo/(.*)   /index.php?name=szerzo&writer_name=$1
(URL rövidítés, illetve a régi url átirányítását az újra végzik)

Namármost van egy jelszóval védett része az oldalnak a member/ könyvtáron belül.
Azt akarom, hogy a member/ könyvtáron belül is éljenek ezek az átirányítások.
Meg lehet-e ezt oldalni anélkül, hogy ilyet kelljen csinálnom:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([0-9]*)$
RewriteRule ^member/show\.php$    /member/tortenet/%2? [R=301,L]
RewriteRule ^member/cikk/([0-9]*) /member/index.php?name=news&id=$1
RewriteRule ^member/szerzok/      /member/index.php?name=szerzok
RewriteRule ^member/szerzo/(.*)   /member/index.php?name=szerzo&writer_name=$1
Jó 90 sornál tart a .htacces fájl, nem biztos, hogy jó ötlet lenne megduplázni.

Ötlet?
 
1

relatív útvonalak

vbence · 2006. Júl. 11. (K), 23.47
A Rewrite, ha .htaccess fájlból hívod (nem szerver configból), reltaív url-ekkel dolgotik. Ez jól látszik: ^show és nem ^/show. Ha a htacces fájlodat megváltoztatod így:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([0-9]*)$
RewriteRule ^show\.php$    tortenet/%2? [R=301,L]
RewriteRule ^cikk/([0-9]*) index.php?name=news&id=$1
RewriteRule ^szerzok/      index.php?name=szerzok
RewriteRule ^szerzo/(.*)   index.php?name=szerzo&writer_name=$1
(leszeded a / karaktert az átirányított címekről), akkor egyezegybe átmásolhatod (vagy symlinkelheted - konfigurációtól függ) ezt a fájlt a members alá, és ugyanúgy fog ott is menni.

Ajánlom még fiygelmedbe a RewriteBase direktívát. Nem próbáltam ki, de talán ez is működhet, és akkor nem kell 2 ugyanolyan htaccess fájlod legyen (az átirányítások viszont legyenek relatívak, ahogy fent mutattam)

RewriteBase .
Mégegyszer mondom, ezt nem próbáltam, lehet, hogy hüjeség..
2

hm...

KergeKacsa · 2006. Júl. 12. (Sze), 01.02
Ha ezt csinálom:
RewriteEngine On
RewriteRule ^cikk/([0-9]*)      index.php?name=cikk&id=$1
400 Bad Request-et kapok. ("Your browser sent a request that this server could not understand.")

És ha ezt:
RewriteEngine On
RewriteBase .
RewriteRule ^cikk/([0-9]*)      index.php?name=cikk&id=$1
Ekkor Internal Server Error-t kapok.

És még be sem raktam őket a member/ könyvtárba, szóval valószínűleg szintaktikai hiba lehet velük.
(amúgy az elsőt már próbáltam én is :))
3

Lehet

Bártházi András · 2006. Júl. 12. (Sze), 11.38
Kb:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([0-9]*)$
RewriteRule ^(member/)?show\.php$    /$1tortenet/%2? [R=301,L]
De nem biztos, hogy szerencsés így felépíteni az alkalmazásod, lehetne a programba is tenni a logika egy részét.
4

köszi :)

KergeKacsa · 2006. Júl. 12. (Sze), 12.59
Most ide lyukadtam ki, ezzel elviekben megy is :)
RewriteRule ^(()|(member/))cikk/([0-9]*)  /$1index.php?name=cikk&id=$4


Szerintem 2-féleképpen érdemes csinálni. Vagy csak 1 szabályt rakni .htacces-be és onnantól kezdve az egészet a php művelje, vagy úgy, hogy az egészet .htacces csinálja.

Ennél jobban keverve szerintem elég átláthatatlan tudna lenni.
PHP-ben bonyolultabbnak tűnik leprogramozni is nekem. Ez olyan szép átlátható eddig. :)

De azért ha tudnál egy linket adni, hogy hol van egy jó kis példakód, szivesen belenéznék. :)