2017-10-05 1 views
1

J'ai un problème avec la redirection. En ce moment, j'ai une page sur l'adresse comme:Apache - Redirection - Chemins

http://localhost/Stella/Wiki/index.php 

également dans le même répertoire que j'ai mon fichier .htaccess, qui devrait rediriger toutes les requêtes vers le index.php.

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php 
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA] 

Cette redirection fonctionne vraiment bien, mais je veux l'utiliser de manière relative, comme:

RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule (.*)$ /index.php?id=$1 [L,QSA] 

Comme sans chemin absolu, parce que je vais avoir beaucoup de sous-dossiers, et je n » Je veux avoir de longues règles comme: /xxx/xxx/xxx/xxx/index.php.

Pouvez-vous m'aider à résoudre ce problème? Je ne sais pas quoi faire, ou si c'est même possible?

Répondre

1
RewriteCond %{REQUEST_URI} !^/Stella/Wiki/index.php 
RewriteRule (.*)$ /Stella/Wiki/index.php?id=$1 [L,QSA] 

Si le .htaccess est situé à /Stella/Wiki/.htaccess alors vous pouvez écrire ces directives comme:

RewriteRule ^index\.php$ - [L] 
RewriteRule (.*) index.php?id=$1 [L,QSA] 

Comme vous le suggérez, celui-ci utilise maintenant chemins relatifs. Notez que les chemins relatifs ne commencent pas par une barre oblique. Si vous utilisez un préfixe barre oblique, cela sera relatif à la racine (c'est-à-dire relatif à la racine du document du site).

Lorsque vous utilisez un chemin relatif dans les fichiers .htaccess par répertoire, le préfixe de répertoire (le chemin du système de fichiers où se trouve le fichier .htaccess) est ajouté à la fin. Donc, index.php se trouve dans le répertoire où se trouve le fichier .htaccess. Vous pouvez remplacer cela par la directive RewriteBase.

Cependant, ceci est un peu différent de vos directives. Au lieu d'une condition qui traite uniquement la directive si nous ne demandons pas déjà l'URL cible. Nous avons une exception qui empêche toute autre directive en cours de traitement si cette URL est déjà demandée.

Notez, cependant, que cela dirige toutes les demandes à index.php (comme le fait votre directive d'origine). Y compris les demandes de fichiers et de répertoires existants - si cela vous préoccupe?