J’ai la structure de dossier suivante pour mon site Web:
index.php .htaccess public_html/css/* (css files) public_html/images/* (image files) public_html/js/* (javascript files)
Tous les fichiers statiques du sous-dossier public_html sont liés dans mes fichiers de page sans public_html: par exemple /images/logo/logo.png
J’ai configuré le fichier .htaccess suivant, qui fonctionne correctement sur mon apache local et sur mon espace Web, mais sur l’espace Web des clients, cela ne fonctionne pas:
RewriteEngine On RewriteBase / RewriteCond %{DOCUMENT_ROOT}/public_html/%{REQUEST_URI} -f RewriteRule ^(.*)$ /public_html/$1 [L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond ${REQUEST_URI} ^/public_html/ RewriteRule .* - [L] RewriteRule ^ index.php [QSA,L]
Cette ligne
RewriteCond %{DOCUMENT_ROOT}/public_html/%{REQUEST_URI} -f
doit être réécrit (2 possibilités)
RewriteCond %{DOCUMENT_ROOT}/public_html%{REQUEST_URI} -f # or RewriteCond %{DOCUMENT_ROOT}/public_html/$1 -f
De plus, vous n’avez pas besoin de slash /
before public_html
dans RewriteRule
puisque vous l’avez déjà défini dans RewriteBase
.
Ensuite, cette ligne
RewriteCond ${REQUEST_URI} ^/public_html/
doit être réécrit pour
RewriteCond %{REQUEST_URI} ^/public_html/
erreur de frappe (remplacer $
par %
).
Conclusion
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_URI} ^/public_html/ [NC] RewriteRule ^ - [L] RewriteCond %{DOCUMENT_ROOT}/public_html/$1 -f RewriteRule ^(.*)$ public_html/$1 [L] RewriteRule ^ index.php [L,QSA]