web-dev-qa-db-fra.com

Comment supprimer le index.php dans l'URL?

J'ai installé wordpress dans un sous-répertoire (blog). Dans le répertoire racine, j'ai installé Magento. Maintenant, le répertoire de fichiers est le suivant:

app
downloader
includes
media
....
blog/wp-admin

Mon serveur est nginx . Lorsque je définis l'URL dans wordpress Paramètres Permalink :

http://www.example.com/blog/index.php/sample-post/ 

… Tous les postes sont disponibles. Maintenant, je veux supprimer le index.php de cette URL. Comment devrais-je faire ça? Lorsque je règle la structure personnalisée sur…

http://www.example.com/blog/sample-post/

… Les URL ne sont pas résolues par WordPress et je reçois un 404.

3
stack2013110

Le problème est probablement lié aux paramètres du serveur dans Nginx pour votre blog. Il est probable que les règles d'emplacement pour/blog/soient incorrectes, en particulier try_files. Ça devrait ressembler à ça:

location /blog/ {
     try_files $uri $uri/ /index.php$is_args$args;
}

Cela indique à Nginx l'ordre dans lequel il doit essayer de trouver la ressource demandée. Nous commencerons d'abord par essayer de trouver l'objet exact dans l'URL. Si cela n'existe pas, il essaiera de trouver cet objet sous forme de répertoire. Si cela n'existe pas, la requête sera transmise à index.php avec tous les arguments ou chaînes de requête, le cas échéant. Depuis index.php dans le gestionnaire principal de WordPress, cela déclenchera la recherche par WordPress de la page ou de la publication que vous avez demandée en fonction de vos règles de réécriture.

La belle chose à propos de cette configuration est que vous pouvez maintenant changer votre structure de permalink pour tout ce que WordPress prend en charge sans avoir à changer vos règles Nginx. C'est également la méthode recommandée pour utiliser des règles de réécriture explicites dans Nginx.

3
Christiaan

Placez ce code dans votre fichier functions.php

   add_filter( 'got_rewrite', '__return_true', 999 );

Mettre à jour:

got_mod_rewrite () function vérifie si le serveur actuel est Apache ou n'utilise pas Apache_mod_loaded () function. Puisque nous utilisons nginx, cela retourne false. Wordpress ajoute donc index.php dans l’URL.

En utilisant got_rewrite filter, nous disons à wordpress que nous avons réécrit notre serveur.

1
Giri

Ajoutez cet objet d'emplacement à la configuration de votre serveur dans votre nginx.conf.

location /blog {
    try_files $uri $uri/ /blog/index.php$is_args$args;
}

Puis redémarrez Nginx.

Lien symbolique au dossier Wordpress

J'utilise un lien symbolique vers le dossier wordpress dans mon implémentation et j'ai constaté qu'il subsistait des complications lorsque j'essayais d'accéder à de vrais dossiers à l'intérieur de ce lien symbolique. Il y a trois de ces dossiers et la partie try_files $uri/ semble échouer ici (du moins pour moi), alors j'ai fini par exclure manuellement ces dossiers de la manipulation par try_files. Si vous rencontrez des problèmes similaires, essayez le bloc d’emplacement ci-dessous.

location ~* \/blog\/(?!.*(wp-admin|wp-content|wp-includes)).* {
    try_files $uri $uri/ /blog/index.php$is_args$args;
}
1
Chris H.