2 votes

.htaccess cache l'extension tout en forçant les www

J'ai le fichier htaccess suivant, qui masque l'extension php et oblige toutes les URL à utiliser www :

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Pour la première partie, le crédit revient à cette réponse et la seconde à cette réponse .

Cela fonctionne parfaitement dans la plupart des cas, mais il y a un problème. Lorsqu'un utilisateur essaie d'aller sur http://example.com/foo (ou au lieu de "foo", n'importe quelle autre page) il redirige vers http://www.example.com/foo.php .

Comment puis-je le faire rediriger vers http://www.example.com/foo c'est-à-dire sans le .php ?

2voto

anubhava Points 172509

Vous devez juste changer l'ordre de vos règles. D'abord la redirection externe puis la redirection interne. Ayez votre code comme ceci :

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>

Je l'ai testé et cela fonctionne bien de mon côté.

1voto

Matthew Ratzloff Points 2047

Qu'est-ce que "foo" dans ce cas, un fichier ? Si c'est le cas, cela fonctionne :

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Si vous voulez exclure spécifiquement "foo",

RewriteRule ^foo$ - [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Si vous essayez d'utiliser un framework web, ils veulent probablement que vous redirigiez toutes les requêtes qui ne sont ni des fichiers ni des répertoires vers quelque chose comme index.php.

Edit : Essayez de permuter et de consolider les deux sections :

Options +FollowSymLinks
Options +Indexes

<IfModule rewrite_module>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  RewriteCond %{SCRIPT_FILENAME} !-f
  RewriteCond %{SCRIPT_FILENAME} !-d
  RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X