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:
Permalink Settings
. Je viens d’append la partie personnalisée. 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:
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