• Aucun résultat trouvé

Apache

Alors que CakePHP est construit pour travailler avec mod_rewrite –et habituellement il l’est– nous avons remarqué que certains utilisateurs n’arrivent pas à obtenir un bon fonctionnement sur leurs systèmes.

Ici il y a quelques trucs que vous pourriez essayer pour que cela fonctionne correctement. Premièrement, regardez votre fichier httpd.conf (Assurez-vous que vous avez édité le httpd.conf du système plutôt que celui d’un utilisateur- ou le httpd.conf d’un site spécifique).

Ces fichiers peuvent varier selon les différentes distributions et les versions d’Apache. Vous pouvez consulterhttp: //wiki.apache.org/httpd/DistrosDefaultLayoutpour plus d’informations.

1. Assurez-vous que l’utilisation des fichiers .htaccess est permise et que AllowOverride est défini à All pour le bon DocumentRoot. Vous devriez voir quelque chose comme :

# Chaque répertoire auquel Apache a accès peut être configuré avec # respect pour lesquels les services et les fonctionnalités sont

# autorisés et/ou désactivés dans ce répertoire (et ses sous-répertoires). #

# Premièrement, nous configurons "par défaut" pour être un ensemble # très restrictif de fonctionnalités. # <Directory /> Options FollowSymLinks AllowOverride All # Order deny,allow # Deny from all

</Directory>

2. Assurez-vous que vous avez chargé correctement mod_rewrite. Vous devriez voir quelque chose comme : LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Dans la plupart des systèmes, cette ligne est commentée donc vous aurez juste besoin de retirer le symbole # en début de ligne.

Après avoir effectué les changements, redémarrez Apache pour être sûr que les paramètres soient actifs. Vérifiez que vos fichiers .htaccess sont effectivement dans le bon répertoire.

Cela peut arriver pendant la copie parce que certains systèmes d’exploitation traitent les fichiers qui com- mencent par “.” en caché et du coup ne les voient pas pour les copier.

3. Assurez-vous que votre copie de CakePHP vient de la section des téléchargements du site de notre dépôt Git, et a été dézippé correctement en vérifiant les fichiers .htaccess.

Le répertoire app de CakePHP (sera copié dans le répertoire supérieur de votre application avec Bake) :

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L]

</IfModule>

Le répertoire webroot de CakePHP (sera copié dans le webroot de votre application avec Bake) :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]

Si votre site Cakephp a toujours des problèmes avec mod_rewrite, essayez de modifier les paramètres pour les Hôtes Virtuels. Si vous êtes sur Ubuntu, modifiez le fichier /etc/apache2/sites-available/default (l’en- droit dépend de la distribution). Dans ce fichier, assurez-vous que AllowOverride None a été changé en AllowOverride All, donc vous devez avoir :

<Directory />

Options FollowSymLinks AllowOverride All

</Directory>

<Directory /var/www>

Options Indexes FollowSymLinks MultiViews AllowOverride All

Order Allow,Deny Allow from all

</Directory>

Si vous êtes sur macOS, une autre solution est d’utiliser l’outilvirtualhostx94pour faire un Hôte Virtuel pour

pointer vers votre dossier.

Pour beaucoup de services d’hébergement (GoDaddy, 1and1), votre serveur web est en fait déjà distribué à par- tir d’un répertoire utilisateur qui utilise déjà mod_rewrite. Si vous installez CakePHP dans un répertoire utili- sateur (http://exemple.com/~username/cakephp/), ou toute autre structure d’URL qui utilise déjà mod_rewrite, vous aurez besoin d’ajouter les requêtes (statements) RewriteBase aux fichiers .htaccess que CakePHP utilise (.htaccess, webroot/.htaccess).

Ceci peut être ajouté dans la même section que la directive RewriteEngine, donc par exemple, votre fichier .htaccess dans webroot ressemblerait à ceci :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /path/to/cake/app RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]

</IfModule>

Les détails de ces changements dépendront de votre configuration, et pourront inclure des choses supplémen- taires qui ne sont pas liées à CakePHP. Merci de vous renseigner sur la documentation en ligne d’Apache pour plus d’informations.

4. (Optionnel) Pour améliorer la configuration de production, vous devriez empêcher les assets invalides d’être parsés par CakePHP. Modifiez votre webroot .htaccess pour quelque chose comme :

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /path/to/cake/app RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !^/(webroot/)?(img|css|js)/(.*)$ RewriteRule ^ index.php [QSA,L]

</IfModule>

Ce qui est au-dessus va simplement empêcher les assets incorrects d’être envoyés à index.php et à la place d’afficher la page 404 de votre serveur web.

De plus, vous pouvez créer une page HTML 404 correspondante, ou utiliser la page 404 de CakePHP intégrée en ajoutant une directive ErrorDocument :

ErrorDocument 404 /404-not-found

http://clickontyler.com/virtualhostx/

nginx

nginx ne fait pas usage de fichiers .htaccess comme Apache, il est donc nécessaire de créer les URLs réécrites disponibles dans la configuration du site. Ceci se fait habituellement dans /etc/nginx/sites-available/ your_virtual_host_conf_file. Selon votre configuration, vous devrez modifier cela, mais à tout le moins, vous aurez besoin de PHP fonctionnant comme une instance FastCGI. La configuration suivante redirige la requête vers webroot/index.php :

location / {

try_files $uri $uri/ /index.php?$args; }

Un extrait de directive « server » ci-dessous : server {

listen 80; listen [::]:80;

server_name www.example.com;

return 301 http://example.com$request_uri; } server { listen 80; listen [::]:80; server_name example.com; root /var/www/example.com/public/webroot; index index.php; access_log /var/www/example.com/log/access.log; error_log /var/www/example.com/log/error.log; location / {

try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_intercept_errors on;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

}

Note : Dans les dernière versions de PHP-FPM, le système est configuré pour écouter le socket unix php-fpm plutôt que le port TCP 9000 de l’adresse 127.0.0.1. Si vous avez une erreur « 502 bad gateway errors » avec la configuration ci-dessus, essayez de mettre à jour fastcgi_pass en pointant sur le socket unix Recent configurations of PHP-FPM are set to listen to the unix php-fpm (ex : fastcgi_pass unix :/var/run/php/php7.1-fpm.sock ;) plutôt que le port TCP.

IIS7 (serveurs Windows)

IIS7 ne supporte pas nativement les fichiers .htaccess. Bien qu’il existe des add-ons qui peuvent ajouter ce support, vous pouvez aussi importer les règles des .htaccess dans IIS pour utiliser les rewrites natifs de CakePHP. Pour ce faire, suivez ces étapes :

1. Utilisezl’installeur de la plateforme Web de Microsoft95pour installer l’URLRewrite Module 2.096ou télé- chargez le directement (32-bit97/64-bit98).

2. Créez un nouveau fichier dans votre dossier CakePHP, appelé web.config.

3. Utilisez Notepad ou tout autre éditeur XML-safe, copiez le code suivant dans votre nouveau fichier web.config : <?xml version="1.0" encoding="UTF-8"?>

<configuration>

<system.webServer> <rewrite>

<rules>

<rule name="Exclude direct access to webroot/*"

stopProcessing="true">

<match url="^webroot/(.*)$" ignoreCase="false" /> <action type="None" />

</rule>

<rule name="Rewrite routed access to assets(img, css, files, js,

˓→favicon)"

stopProcessing="true">

<match url="^(img|css|files|js|favicon.ico)(.*)$" /> <action type="Rewrite" url="webroot/{R:1}{R:2}"

appendQueryString="false" /> </rule>

<rule name="Rewrite requested file/folder to index.php" stopProcessing="true">

<match url="^(.*)$" ignoreCase="false" /> <action type="Rewrite" url="index.php"

appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>

Une fois que le fichier web.config est créé avec les bonnes règles de réécriture des liens de IIS, les liens CakePHP, les CSS, le JavaScript, et le reroutage devraient fonctionner correctement.