2012-01-09 17 views
6

Non riesco a capire come reindirizzare alla directory superiore in questo caso: Ho una directory root con il file .htaccess, dove rewriteEngine è attivo. In questa directory ho un file rootFile.php. Inoltre, in questa directory ho una directory "forum", con un altro file .htaccess in esso.htaccess RewriteRule reindirizzamento alla directory padre?

Quando è richiesta "forum.mySite.com/rootFile.php", devo reindirizzare a "mySite.com/rootFile.php" il che significa che devo reindirizzare la richiesta alla directory superiore.

/forum/.htaccess:

RewriteEngine on 

RewriteBase /forum/ 

RewriteRule ^sitemap     /forum/map.php    [L] 
... 

ho cercato di:

RewriteEngine on 

RewriteBase /forum/ 

RewriteRule ^rootFileName     ../rootFile.php   [L] 
\# or so RewriteRule ^rootFileName   /rootFile.php    [L] 
\# or so RewriteRule ^rootFileName   rootFile.php    [L] 

RewriteRule ^sitemap     /forum/map.php    [L] 

provato anche questo:

RewriteEngine on 

RewriteBase/

RewriteRule ^rootFileName     ../rootFile.php   [L] 
\# or so RewriteRule ^rootFileName   /rootFile.php    [L] 
\# or so RewriteRule ^rootFileName   rootFile.php    [L] 

RewriteBase /forum/ 

RewriteRule ^sitemap     /forum/map.php    [L] 

Ed è sempre reindirizzamento da/forum/rootFileName a/forum/rootFile, ma mai a/rootFile.

Dov'è il mio errore?

risposta

0

Hai scritto:

Quando v'è richiesta di "forum.mySite.com/rootFile.php", ho bisogno di destinarli a "mySite.com/rootFile.php", che significa che ho bisogno a reindirizzare la richiesta alla directory superiore.

Forse intendevi:

Quando v'è richiesta di "mySite.com/forum/rootFile.php", ho bisogno di destinarli a "mySite.com/rootFile.php" che significa che ho bisogno di richiesta di reindirizzamento alla directory superiore.

... Il che a sua volta significa:

Quando v'è richiesta di "/forum/rootFile.php", ho bisogno di destinarli a "/rootFile.php" che significa che ho bisogno di richiesta di reindirizzamento alla directory superiore.

Nella tua .htaccess nel /forum dir provare questo:

RewriteEngine On 
RewriteRule ^rootFileName(.*) /rootFile.php [QSA,R=301,L] 
7

Non si può riscrivere al di fuori del documento root. Questa è una cosa di sicurezza.

si può solo creare un rootFile.php che contiene solo <?php include('../rootfile.php'); ?>

3

Non si può riscrivere a percorsi che sono fuori della vostra radice del documento per ragioni di sicurezza. In realtà questo dovrebbe essere evitato perché non è una buona pratica.

In ogni caso, per rispondere alla domanda, una soluzione potrebbe essere la creazione di un collegamento simbolico nella root del documento che punti alla directory di destinazione/principale, ma è necessario proteggerlo dagli accessi diretti.

Lasciatemi fare un esempio. Si supponga che la nostra radice del documento è /var/www/project1 e che si desidera riscrivere il /var/www/project2/target.php

Quindi, è necessario creare un collegamento simbolico all'interno /var/www/project1 che punta a /var/www/project2 di nome (per esempio) p2.

Questo dovrebbe essere il vostro file di /var/www/project1/.htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_URI} /hello/world 
    RewriteRule ^(.*)$ p2/target.php [QSA,L] # p2 is the symlink name! 
</IfModule> 
+0

da dove viene il percorso '/ ciao/world' deve puntare a? – MrIsaacs

Problemi correlati