2010-02-12 8 views
1

J'ai une installation CakePHP dans un sous-dossier dans mon serveur, je veux installer une autre application dans ce sous-dossier:CakePHP configuration mod_rewrite de exclure un dossier particulier/url

root/public_html/subfolder/cake/ 
root/public_html/subfolder/app/ 

etc. maintenant j'ai besoin une application personnalisée installée là:

root/public_html/subfolder/my_custom_application/ 

J'ai quelque chose comme ça dans mon .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

Comment puis-je le configurer pour exclure le dossier "my_custom_application" de ces règles?

J'ai essayé ceci:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule ((?!my_custom_application).*) app/webroot/$1 [L] 
</IfModule> 

Mais je reçois ceci:

Error: The requested address '/y_custom_application' was not found on this server. 

Merci à l'avance.

Mauricio.

Répondre

4

Comment exclure un répertoire de CakePHP routage:

je suis tombé sur le même problème que vous. J'ai lutté, mais j'ai finalement trouvé quelque chose qui marchait.
(Je réponds parce que la réponse ci-dessus n'a pas fonctionné pour moi, mais cela l'a fait).

Structure Mon répertoire:

root/public_html/app/ 
root/public_html/lib/ 
root/public_html/plugins/ 
root/public_html/vendors/ 
root/public_html/directory_to_exclude/ 

Ce que j'ajouté au routage par défaut de CakePHP:

RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*) 

En effet, je avais besoin pour permettre aux gens d'accéder au sous-dossier séparément (depuis a une application séparée). Aussi, dans mon cas, je desserve une application CakePHP par défaut depuis le répertoire racine.
Alors, voici ce que mon CakePHP 2.x htaccess ressemble:

Mise à jour .htaccess (cela fonctionne pour moi)

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*) 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

Dans votre cas, je comprends que vous avez besoin que cela fonctionne dans un sous-dossier ; voici mon ajusté htaccess Je n'ai pas eu la chance de tester, mais je crois que cela (ou quelque chose de proche) fonctionnera:

Le produit final (pour un sous-dossier)

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/subfolder/directory_to_exclude/(.*) 
    RewriteRule ^$ subfolder/app/webroot/ [L] 
    RewriteRule (.*) subfolder/app/webroot/$1 [L] 
</IfModule> 
+0

Cela semble fonctionner. mais ne fonctionne pas dans CakePHP 3.x s'il vous plaît me donner des suggestions. –

2

Mettre cela avant les RewriteRule lignes:

RewriteCond %{REQUEST_URI} !^/my_custom_application 
+0

Salut, merci pour la pointe, mais je dois toujours la même erreur: Erreur: L'adresse demandée '/ my_custom_application' n'a pas été trouvée sur ce serveur. cette fois avec le "m" de "my_custom_application" – Mauricio

+0

Ensuite, la règle fonctionne correctement. Le problème est ailleurs. –

0

Vous avez pour remplacer dir_to_exclude par votre nom de répertoire.

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/) 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/) 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

Si vous voulez avoir plus d'un répertoire exclu que vous devez les ajouter séparés par | additional_dir_to_exclude

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/) 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/) 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 
Questions connexes