wordpress htaccess comment supprimer toute l’extension php sauf index.php

J’ai un blog WordPress et je veux y append des pages personnalisées et supprimer l’extension .php et la chaîne de requête des URL.

Toutes les URL de la page WordPress sont comme index.php?pagename= , donc si j’ai essayé d’append RewriteRule ^(.*)$ $1.php dans le fichier .htaccess , les autres pages renvoient 500 internal server error . Comment puis-je supprimer l’extension php de tout sauf index.php et login.php ?

Voici mon fichier existant .htaccess :

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # RewriteRule ^(.*)$ $1.php # add this line will broken the wordpress rewrite rule  # END WordPress 

Si vous voulez append, par exemple, quelques pages PHP personnalisées, vous devriez append vos propres réécritures avant la partie standard de WordPress, mais après RewriteBase / .

J’ai ajouté deux ou trois réécritures capables de gérer des pages personnalisées stockées dans un répertoire privé custom .

  # BEGIN WordPress  RewriteEngine On RewriteBase / # *** START CUSTOM PART *** RewriteRule ^page1$ /custom/page1.php [L,QSA] RewriteRule ^page2$ /custom/page2.php [L,QSA] # *** END CUSTOM PART *** RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Si votre site est disponible sur http://www.example.com , vos pages personnalisées seront accessibles via http://www.example.com/page1 , http://www.example.com/page2 et ainsi de suite. ..

Juste quelques mots concernant les drapeaux de réécriture [L,QSA] :

  • L – Si réécrire la correspondance, arrêtez immédiatement le processus de réécriture et n’appliquez plus de règles.
  • QSA – Ajoute une chaîne de requête de l’URL de la demande d’origine aux pages personnalisées. Cela signifie que l’appel à http://www.example.com/page1?foo=bar&c=1 sera réécrit en interne dans /custom/page1.php?foo=bar&c=1

Notez s’il vous plaît:

  1. Si vous avez déjà une page nommée “page1” dans votre site wordpress, cette page sera remplacée par la page personnalisée ajoutée dans la règle de réécriture.
  2. Ces directives Apache httpd étaient standard et générées par WordPress, en configurant les Permalink Settings . Je viens d’append la partie personnalisée.
  3. Chaque fois que vous modifiez les Permalink Settings , votre fichier .htaccess sera écrasé, mieux si vous modifiez la permission .htaccess faisant le fichier en lecture seule. Et, en tout cas, enregistrez une copie de votre configuration .htaccess.

D’un autre côté, si vous souhaitez que votre WordPress dispose d’URL plus conviviales, à savoir les URL sans pages .php et sans les chaînes de requête complètes, mais uniquement le slug post / page comme identifiant unique, vous pouvez accéder à WordPress Permalink Settings et sélectionner Post name ou l’option que vous préférez:

Paramètres de WordPress permalink

Lorsque vous activez les Permalink Settings , le travail d’Apache httpd est limité à la partie .htaccess. Cela signifie que Apache redirige tout (en-tête et corps de requête) via .htaccess vers la page index.php et que WordPress implémente en interne chaque réécriture. Si vous souhaitez plus de suggestions concernant la configuration de WordPress, je vous suggère d’écrire vos questions dans https://wordpress.stackexchange.com/

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Eh bien, cela ne laissera pas .php sur index, mais au moins cela fonctionnera sans 500 erreurs de serveur internes. Pourquoi avez-vous besoin de garder index.php? Login.php aura l’ancien format.

WordPress a la réécriture d’URL intégrée sans modifier manuellement le fichier htaccess. Vous pouvez choisir l’affichage de vos URL dans l’administrateur WordPress sous “parameters” -> “liens permanents”.

WordPress fournit également une classe, WP_Rewrite , que vous pouvez utiliser pour modifier l’URL si nécessaire.

La réponse la plus évidente à votre question consiste à append un RewriteCond avant votre RewriteRule.

 RewriteCond %{REQUEST_URI} !^/(index|login).php$ 

Cela accomplirait exactement ce que vous voulez. Toute requête reçue, sauf pour index.php et login.php, sera ajoutée par votre règle.

Actuellement, votre règle transforme index.php et login.php en index.php.php et login.php.php. Une manière plus logique de le résoudre serait probablement d’append ceci:

 RewriteCond %{REQUEST_URI} !.*php$ 

Ensuite, il suffit de transformer quelque chose sans .php avec .php

Veuillez noter que votre RewriteRule ne supprime pas la chaîne de requête même si vous avez dit le vouloir. Il supprimera la chaîne de requête si vous la changez en:

 RewriteRule ^(.*)$ $1.php? 

Si vous n’ajoutez pas le? il appenda le query_ssortingng par défaut