2015-01-02 13 views
5

Sto cercando di riscrivere l'URL attraverso il file .htaccess in modo che il seguente URLCSS, JS e immagini non vengono visualizzate con abbastanza url

www.domain.com/subfolder/index.php?key 

si può accedere:

www.domain.com/subfolder/index.php/key 

la la "chiave" specificata determinerà quale pagina includere nel codice PHP. Ho già il seguente codice htaccess, tuttavia CSS, JS, immagini e simili non vengono visualizzati quando si utilizza il secondo URL (pulito). Qualche idea su quale potrebbe essere il problema?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] 
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1 
+0

È necessario utilizzare i percorsi * absolute * invece dei percorsi * relativi * per tutte le risorse html (css, js, immagini, collegamenti href, ecc.) –

+0

Grazie per la risposta! Tuttavia, la posizione della webapp potrebbe cambiare, sarebbe un problema cambiare tutti i percorsi, sto cercando una soluzione htaccess. – PHPNorton

+1

Non puoi gestirlo con htaccess. Tutto quello che puoi fare è usare ** percorsi ** assoluti. Puoi farlo aggiungendo un tag subito dopo ogni '' nelle tue pagine: ''. Vedere la mia risposta su una domanda simile qui: http: // StackOverflow.it/questions/25630373/a-way-to-avoid-apache-alias-path-to-include-html-resources-like-css/25632455 # 25632455 –

risposta

5

Quando si utilizza URL relativi di, il browser creerà dinamicamente un URL completo utilizzando l'URL della risorsa è caricato. In altre parole: utilizza l'url come viene visualizzato nella barra degli indirizzi. Nel tuo caso (www.domain.com/subfolder/index.php/key) tenta di caricare qualsiasi url relativo relativo a www.domain.com/subfolder/index.php/. Tuttavia, le tue risorse non si trovano lì.

Hai due opzioni per risolvere questo problema:

  • convertire il vostro relativi URL nel assoluta url, almeno in assoluto alla radice del dominio. Qualcosa come <img src="img/unicorn.png"> deve essere trasformato in <img src="/path/to/img/unicorn.png">.

  • Aggiungi una base all'elemento della testa. Questa base verrà utilizzata al posto dell'URL della risorsa per calcolare l'URL completo. Aggiungere <base href="/"> all'elemento <head>. / verrà quindi utilizzato come base per qualsiasi url relativo.

1

Hai provato l'URL di base? Questa è la soluzione migliore che ho trovato. Basta mettere uno in testa e poi si può anche dargli un ID e accedere all'URL con javascript.

<base id='baseElement' href="your path goes here"> <!--possibly generated with serverside code--> 

di accesso con jQuery

var base = $('#baseElement').attr('href'); 
+0

Eventuali informazioni aggiuntive (esempi di codice, documentazione) su come implementare questa idea migliorerebbero questa risposta. – ryanyuyu

0

Inoltre, si può provare ad aggiungere questo al tuo .htaccess:

RewriteBase/
+0

Perché dovrebbe fare qualcosa? RewriteBase è la base che viene utilizzata per le riscritture, ma poiché questo problema non è correlato alle riscritture effettive, non avrebbe alcun effetto. – Sumurai8

1

In realtà c'è una soluzione con .htaccess!

Supponendo che il vostro index.php si trova in /mysite/ e dei file per le risorse sono in /mysite/scripts/, /mysite/images/ e /mysite/style/ come le miniere, si potrebbe andare in questo modo:

RewriteEngine on 
#first exclude those folders 
RewriteBase "/mysite/" 
RewriteRule ^(style|scripts|images)($|/) - [L] 
#then go with your rules (the [L] terminates the ruling) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] 
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1 

potete vedere .htaccess mod_rewrite - how to exclude directory from rewrite rule per pochi altri modi

Problemi correlati