Sto cercando di ottenere un reindirizzamento URL di base per pretty-URL, e a causa di immagini, CSS ecc. Che risiedono nello stesso percorso ho bisogno di assicurarmi che se l'URL è accesso senza una barra finale, viene aggiunto automaticamente.Come fare un reindirizzamento mod_rewrite all'URL relativo
Questo funziona bene se metto l'URL assoluto come questo:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ http://www.mydomain.com/myParentDir/$1/ [R,nc,L]
Ma se cambiare questo ad un URL relativo, in modo che non devo cambiarlo ogni volta che mi muovo le cose in cartelle , semplicemente non funziona.
Questi sono quelli che ho provato e tutto non funzionano, o mi reindirizzare al percorso effettivo directory interna del server come/public_html/...:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ ./myParentDir/$1/ [R,nc,L]
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ myParentDir/$1/ [R,nc,L]
Qual è il modo giusto di fare una reindirizzamento URL in modo che, se l'utente inserisce qualcosa di simile:
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir
lui viene reindirizzato a (via HTTP 301 o 302):
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir/
Grazie.
MODIFICA: Aggiunta di ulteriori dettagli perché non sembra essere chiaro. Diciamo che sto implementando una galleria, e voglio avere degli URL piuttosto che usano mod_rewrite. Quindi, mi piacerebbe avere gli URL come segue:
http://www.mydomain.com/somedir/galleries/cats
che mostra le miniature di gatti, mentre:
http://www.mydomain.com/somedir/galleries/cats/persian
che mostra un'immagine dalle miniature di tutti i gatti, di nome persiano. Quindi, in realtà la struttura di directory fisica e riscrittura sarebbe la seguente:
http://www.domain.com/somedir/gallery.php?category=cats&image=persian
Quindi quello che voglio fare è mettere un file .htaccess nella/somedir che cattura tutte le richieste effettuate a/Gallerie ed a seconda della sottodirectory virtuali segue, li usano come segnaposto nel riscrittura, con regole 2 di riscrittura:
RewriteRule ^galleries/(A-Z0-9_-]+)/$ ./gallery.php?category=$1 [nc]
RewriteRule ^galleries/(A-Z0-9_-]+)/+([A-Z0-9_-]+)$ ./gallery.php?category=$1&image=$2 [nc]
Ora il problema è che lo script galleria, infatti, ha bisogno di qualche CSS, Javascript e immagini, che si trova a http://www.domain.com/somedir/css, http://www.domain.com/somedir/js, e http://www.domain.com/somedir/images rispettivamente.
Non voglio hardcode alcun URL assoluto, quindi CSS, JS e immagini saranno riferiti a utilizzando URL relativi, (./css, ./js, ./images ecc.). Così posso fare URL riscrittura come segue:
RewriteRule ^galleries/[A-Z0-9_-]+/css/(.*)$ ./css/$1 [nc]
Il problema è che, poiché http://www.domain.com/somedir/galleries/cats è una directory virtuale, quanto sopra funziona solo se l'utente digita:
http://www.domain.com/somedir/gallaries/cats/
Se l'utente omette la barra finale mod_dir non lo aggiungerà perché in realtà questa directory non esiste realmente.
Se metto una riscrittura di reindirizzamento con l'URL assoluto funziona:
RewriteRule ^galleries/([A-Z0-9_-]+)$ http://www.mydomain.com/subdir/galleries/$1/ [R,nc,L]
Ma io non voglio avere il prefisso URL hardcoded perché voglio essere in grado di mettere questo su qualsiasi dominio che voglio in qualunque sottodirectory che voglio, quindi ho provato questo:
RewriteRule ^galleries/([A-Z0-9_-]+)$ galleries/$1/ [R,nc,L]
Ma invece si reindirizza a:
http://www.mydomain.com/home/myaccount/public_html/subdir/galleries/theRest
che ovviamente non è quello che voglio.
EDIT: Ulteriori chiarimenti
La soluzione che sto cercando è quello di evitare hardcoding il nome di dominio o percorsi delle cartelle nel file .htaccess. Sto cercando una soluzione in cui se impacchetta il file .htaccess con il resto degli script e delle risorse, ovunque l'utente la decomprimi sul proprio server web, funziona immediatamente. Tutto funziona così a prescindere da questo problema di trailing finale.
Quindi qualsiasi soluzione che implichi l'hardcoding della directory principale o del percorso del server web in .htaccess in alcun modo non è ciò che sto cercando.
@DoktorJ Conviene la modifica al mio post risponde alla tua domanda? –
Dovresti scegliere la risposta accettata, se qualcuno di questi è stato d'aiuto. – sjas