2010-06-23 3 views
2

j'ai fait un .htaccess à mon répertoire racine pour créer un niveau de sous-domaine, on suppose qu'il est sub.domain.ex qui redirigent vers domain.ex/deb/mod_rewrite avec les fichiers .htaccess imbriqués

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} sub.domain.ex 
RewriteCond %{REQUEST_URI} !deb/ 
RewriteRule ^(.*)$ /deb/$1 [L] 

et cela fonctionne bien.

Maintenant, je vais à /deb/ et créer un autre .htaccess avec les éléments suivants

RewriteEngine on 
RewriteRule ^([^/]+)/ /deb.php?app=$1 [NC] 

le deb.php est un fichier qui imprime l'argument "app". Cela fonctionne mais seulement si j'appelle http://sub.domain.ex/something/ (notez le slash à la fin). Il ne fonctionne qu'avec une barre oblique finale, si je l'enlève, ce n'est pas le cas et je veux qu'il fonctionne sans barre finale.

Donc je change la règle en ^([^/]+) mais maintenant j'ai 500 erreur interne Apache. Les coachs regex sont à mes côtés avec la sélection, peut-être qu'il me manque quelque chose. Merci


MISE À JOUR

Je suis runinng fou. Mybe a tort de mettre un .htaccess à la racine pour créer le troisième sous-niveau et les .htacces dans l'autre répertoire? Parce que je fais des trucs. J'utilise cette règle

RewriteEngine on 
RewriteRule ^([^/]+)/ deb.php?app=$1 [NC] 

dans les .htaccess du répertoire /deb et fait une print_r($_GET); et appelé index.php. Donc, le répertoire ne fonctionne pas du tout s'il me transfère sur l'index.php du sous-répertoire cydia et ne prend pas le /deb/deb.php !!! Récapitulatif. ma structure dir est la suivante:

/htdocs/ -> the root of the main domain level like www.example.com 
---index.php -> home file of www.example.com 

/htdocs/deb -> the root directory of the 3th sublevel domain (subdomain.example.com -> 
---index.php 
---deb.php 

Ainsi, le .htaccess pour le domaine de niveau est 3th le dans /htdocs./htaccess et décrit comme avant. L'autre .htaccess pour "embellir" le lien est dans /htdocs/deb/.htaccess. Je veux que quand vous allez à subdomain.domain.com/someText il transforme en deb.php? App = someText

Maintenant j'ai essayé aller à subdomain.domain.com/deb.php....WTF !? le deb.php est /htdocs/deb/deb.php

Accueil est clair

Répondre

0

Je peux me tromper, mais dans la deuxième .htaccess vous devez vérifier que l'URL n'a pas encore Réécriture avec " /deb.php »

donc quelque chose comme

RewriteCond %{REQUEST_URI} !deb\.php 
RewriteRule ^([^/]+) /deb.php?app=$1 [NC] 
+0

merci mais ce n'est pas possible. l'URL de redirection est bonne parce que si j'appelle le site sub.domain.ex/testname il fait écho au contenu de l'emplacement du fichier php sur /deb/deb.php Dans le cas où il suffit d'echo la valeur $ _GET ['app'], juste pour tester. donc le problème c'est-à-dire ailleurs, je pense dans le rgeex mais je ne peux pas compris – Kreker

0

Vous réécrivez la règle devrait être

RewriteRule ^(.*)$ deb.php?app=$1 [L,QSA] 

Ceci est un modèle commun utilisé dans les CMS comme Drupal

+0

ne fonctionnait pas non plus :(. et j'ai essayé avec regcoach et avec le vôtre il me sélectionne toute la lettre tapée – Kreker

+0

cette cause 500 erreur interne apache maintenant – Kreker

2

Cela fonctionne très bien pour moi, au moins, en supposant que j'ai compris tout ce que vous vouliez.

En /htdocs/.htaccess:

RewriteEngine On 
RewriteCond %{HTTP_HOST} =sub.domain.ex 
RewriteCond %{REQUEST_URI} !^deb/ 
RewriteRule ^(.*)$ /deb/$1 

En /htdocs/deb/.htaccess:

RewriteEngine On 
RewriteBase /deb/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/?$ deb.php?app=$1 
RewriteRule !^deb.php index.php 

Edit: Je mis à jour le contenu du second fichier pour refléter vos demandes supplémentaires. Vous devez supprimer le /? si vous ne voulez pas qu'ils puissent aller à sub.domain.ex/something/ -> deb.php?app=something.

+0

ok ça va marcher, mais avec la possibilité d'appeler l'url avec de nombreux paramètres comme subdomain.domain.com/test1/test2/ etc il est possible de bloquer seulement un paramètre sans la barre oblique finale – Kreker

+0

Que voulez-vous tester1/test2/pour pointer vers les fichiers que vous avez et leurs chaînes de requête? –

+0

il y a un autre problème avec votre solution.J'obtiens ceci quand j'imprime $ _GET Array ([app] => deb. php) et ce n'est pas l'argument que nous avons passé – Kreker

0

Je pense qu'il y a une sorte de rescrctions à mon hôte. C'est impossible. J'ai essayé toutes sortes de goo (pour un regexcoach) pour faire correspondre le bon groupe et il n'y a rien d'autre que l'erreur 500 apache. La seule façon de faire fonctionner ceci est d'utiliser les paramètres avec ce ^app/([^/]+) /deb.php?app=$1 et d'appeler avec sub.domain.com/app/nameTest et cela fonctionne avec ou sans le backslash de fin. De vous obtenir des conseils pour se débarrasser de cela, s'il vous plaît faites le moi savoir. bye

Questions connexes