2014-08-27 32 views
6

Probabilmente farò una domanda davvero stupida ma non riesco a trovare un modo per fare ciò che voglio.Trattare una sottodirectory come directory radice per apache

voglio caricare un progetto per il mio server a http://example.com/MyNewProject

In ognuna delle pagine web che includono un file che fa tutte le importazioni per StyleSheets, javascript, ecc non voglio fornire il pieno percorso ogni volta che voglio essere in grado di fare /MyStylesheet.css

Il mio documento principale di siti Web è root /var/www/html/example e la mia nuova directory di progetti è memorizzata in /var/www/html/example/MyNewProject.

Quello che voglio è nella mia importazione quando faccio /MyStylesheet.css invece di andare alla directory web principale dei miei server andrà in/var/www/html/example/MyNewProject per ottenere il CSS.

Ho provato ad aggiungere il seguente al mio file di configurazione di apache:

Alias /NewProjectTemplate "/var/www/html/example/NewProjectTemplate" 
Alias /NewPRojectTemplate/ "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options Indexes FollowSymLinks Includes 
     AllowOverride All 
     XBitHack On 
     Order allow,deny 
     Allow from all 
</Directory> 

Questo, purtroppo, non ha funzionato così ho anche provato ad aggiungere la seguente ai miei VirtualHosts presentare

<VirtualHost *:80> 
DocumentRoot /var/www/html/example/NewProjectTemplate 
ServerName example.com/NewProjectTemplate 
</VirtualHost> 

Ho guardato in giro su Google ma non riesco a trovare nulla di specifico, l'unica cosa che ho trovato è qualcosa a che fare con l'utilizzo del motore Riscrivi ma questo sembra un po 'troppo complicato e OTT per le mie esigenze.

Grazie per l'aiuto che puoi fornire.

UPDATE

OK, ho un po 'più avanti, anche se non molto, sono sicuro che la sua non dovrebbe essere questo complicato.

Invece di usare gli host virtuali, Ora sto utilizzando un alias e sotto è quello che ho aggiunto al mio file httpd.conf

DocumentRoot "/var/www/html" 
Alias /NewTemp/ "/var/www/html/example/NewProjectTemplate/" 
Alias /NewTemp "/var/www/html/example/NewProjectTemplate" 

<Directory "/var/www/html/example/NewProjectTemplate/"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

<Directory "/var/www/html/example/NewProjectTemplate"> 
     Options FollowSymLinks Includes 
     AllowOverride all 
</Directory> 

Nel mio codice HTML nel mio SSI sto facendo il seguente:

<!--#include file="includes/imports.html"--> 

Come potete vedere si tratta di un percorso relativo e comprende è all'interno della radice di NewProjectTemplate. Tuttavia, questo è un file di modello, quindi voglio sempre andare alla radice per trovare il file, quindi è garantito che funzioni indipendentemente dalla profondità del sito. Per esempio se cambio la linea al di sotto Allora ottengo un errore error processing directive

<!--#include file="/includes/imports.html"-->

Così, anche se funziona senza l'/ ma non lo fa con la barra, se non includo la barra in modo questa importazione funziona quindi, le importazioni all'interno del file imports.html funzionano anche se contengono la barra iniziale, quindi vanno sempre alla radice. Di seguito è riportato il mio file HTML importazioni

<link rel="stylesheet" type="text/css" href="/StyleSheet.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/top-nav.css"> 
<link rel="stylesheet" type="text/css" href="/navigation/side-nav.css"> 
<script type="text/javascript" src="/scripts/jquery.js"></script> 
<script type="text/javascript" src="/scripts/menu.js"></script> 

Quindi, solo per chiarire, se il file # include = includes/imports.html direttiva lavori SSI e /StyleSheet.css è importato con successo anche se ha lo slash iniziale. Se aggiungo/al percorso dell'SSI, non viene importato ge.

Ma qui è dove diventa più strano.

Se poi aggiungo un altro file a una sottodirectory, ad es. NewProjectTemplate/MySubDirectory e quindi aggiungi l'SSI per essere ../includes/imports.html ma non funziona ancora. È come la direttiva #include di file SSI che si aspetta che il file si trovi nella stessa directory di lavoro.

Spero che questo ha un senso

+0

Nel nostro codice PHP, abbiamo creato un oggetto Environment che analizza l'URL corrente, e sulla base delle sottodirectory presenti nell'URL, determina il nostro "baseWebPath". Questa è la base per una soluzione basata su modelli in cui indipendentemente dalla posizione dello script, possiamo sempre includere il nostro javascript e css con lo stesso percorso relativo, come "javascript/myscript.js". Presumibilmente, stai cercando di evitare riferimenti come "../javascript/myscript.js" e "../../javascript/myscript.js". Il mio suggerimento è di andare con un approccio basato su PHP piuttosto che cercare di trovare una soluzione basata su Apache. – Steven

risposta

0

Quindi, hai provato così nel host virtuale?

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/var/www/html/example/" 
    ServerName example.local 
    ServerAlias example.local 
    <Directory "/var/www/html/example/"> 
     Options All Includes Indexes FollowSymLinks 
     Order allow,deny 
     Allow from all 
     AllowOverride All 
    </Directory> 

    Alias /NewProjectTemplate /var/www/html/example/NewProjectTemplate 
    <Directory "/var/www/html/example/NewProjectTemplate"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

Speranza che aiuta questa volta ..

+0

Questo non è quello che ho chiesto, questo sta effettivamente cambiando il dominio del mio webserver. L'URL dovrebbe essere ancora http://example.com/NewProjectTemplate, ma NewProjectTemplate è considerato come root – Boardy

+0

aggiornato la risposta, spero che sia d'aiuto ... – pecci

+0

Grazie a questo ho provato, ma non sembra funzionare. Ottengo ancora l'errore PHP dicendo che non può trovare /includes/imports.html./include essere all'interno della radice di NewProjectTemplate. Quindi penso che debba cercare nella radice del server web – Boardy

Problemi correlati