web-dev-qa-db-fra.com

Wordpress multisite htaccess

J'ai configuré Wordpress en tant que multisite et, dans le cadre des étapes, il a donné des instructions pour mettre à jour et remplacer le fichier .htaccess.

Wordpress m'a chargé de remplacer le htaccess par ceci:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

Cependant, cela a causé la rupture de jquery sur un plugin.

Je pensais que cela pourrait être utile, mais quelqu'un pourrait-il aider à donner un aperçu de ce que chacune de ces lignes fait?

En particulier cette ligne:

RewriteRule ^(.*\.php)$ $1 [L]

Comme, si je supprime cette ligne, mon plugin fonctionne bien.

Merci d'avance :)

2
Cody New

Je cherchais des détails sur les raisons pour lesquelles cette ligne est suggérée pour une installation multisite utilisant également des sous-domaines. Je me demande en réalité si ces deux éléments sont pertinents pour une installation de sous-domaine:

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]

Dans une installation de sous-répertoire, les règles d'installation sont légèrement différentes pour supprimer le nom du sous-répertoire de la requête et lui donner l'aspect suivant:

RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

Je vois une boucle de redirection dans mes journaux d'erreur, ce qui est causé par la première version de ces règles, car le texte de remplacement est identique au texte d'origine. J'ai trouvé des preuves que certaines versions de mod_rewrite détecteront que le texte original et le nouveau texte sont identiques et ignorent la réinsertion du résultat. (Je ne sais pas lequel des nombreux liens que j'ai lus à ce stade.)

Je ne vois aucune valeur dans la réécriture d'un URI identique à l'original et provoquant ainsi la réinsertion du lien dans le moteur de réécriture. Avec les règles supprimées, je reçois la page 404 attendue au lieu d'une boucle de redirection qui se termine par une erreur de serveur 500 lorsque la limite de redirection est dépassée.

Note séparée, je pense que la version suggérée du sous-répertoire est également cassée. Comme il utilise ? pour la partie sous-répertoire, il effectuera une boucle sur une URL d'entrée telle que no-such-file.php. La correspondance sur la portion de sous-répertoire ne doit pas permettre zéro copie. La règle devrait donc être:

 RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
 RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]

Une conclusion similaire se trouve ici: https://wordpress.stackexchange.com/a/73185/27576

3
KenB

RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
Redirections http: //votre domaine.ext/wp-admin vers http: // votre domaine.ext/wp-admin/

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
Logique conditionnelle, vérifiez si le nom de fichier demandé estnotun fichier existant (-f) ou un répertoire (-d).

RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
Redirige wp-content.ext, wp-admin.ext et wp-includes.ext vers le fichier lui-même, que ce fichier existe ou non.

RewriteRule ^(.*\.php)$ $1 [L]
Redirige n'importe quel fichier .php dans ce fichier, que le fichier existe ou non.

RewriteRule . index.php [L]
Tout rediriger vers index.php.

Fondamentalement, le .htaccess redirige chaque fichier demandé vers ce fichier particulier et chaque répertoire vers index.php.

Lisez la documentation mod_rewrite détaillée pour obtenir des détails sur le fonctionnement du moteur de réécriture.

2
Mike Madern