web-dev-qa-db-fra.com

Placez les fichiers HTML statiques dans le chemin sous la page WordPress

J'ai une instance WordPress en cours d'exécution sur la racine de mon domaine.

Une page WordPress est située à www.example.com/product/. J'ai placé des fichiers HTML statiques dans un chemin inférieur afin que les visiteurs puissent accéder à www.example.com/product/documentation/ où résident un index.html et d'autres fichiers HTML.

Maintenant, je peux très bien accéder aux fichiers HTML statiques, mais lorsque je vais sur le site WordPress (c'est-à-dire www.example.com/product/), j'obtiens une erreur 403 Forbidden.

Comment puis-je rendre les fichiers HTML statiques disponibles à cette URL tout en conservant l'accès à la page WordPress?

Voici mon fichier .htaccess (je pense que c'est la valeur par défaut non modifiée)

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

Désolé si cette question a déjà reçu une réponse, mais je n’ai trouvé que des questions sur les problèmes d’affichage du contenu statique plutôt que du contenu WordPress.

4
Johannes Dorn

En créant un répertoire physique identique à une URL WordPress (virtuelle), vous avez créé un conflit. L'URL doit être routée via WP, mais le contrôleur frontal par défaut (le code .htaccess présenté ci-dessus) exclut spécifiquement la réécriture des répertoires physiques.

L'erreur 403 Forbidden est due au fait que vous ne disposez pas d'un document d'index de répertoire (par exemple, index.html ou index.php) dans le sous-répertoire /product. (Et vous n'en voulez pas non plus, juste au cas où vous vous le demanderiez.)

Selon votre site, vous pouvez simplement supprimer la vérification du répertoire dans le contrôleur frontal. Par exemple (juste commenté):

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

Cela signifie que les requêtes pour n'importe quel répertoires physiques (uniquement le répertoire nu) ne seront pas accessibles, elles seront transmises via WP. Cependant, cela sera probablement en conflit avec votre URL /product/documentation/. Dans ce cas, vous pouvez ajouter quelque chose comme les directives before ci-dessus:

RewriteRule ^product/documentation/$ /product/documentation/index.html [L]

(Sinon, vous obtiendrez un WordPress 404 si un répertoire physique est demandé, où l'URL n'existe pas dans WP.)

Vous pouvez également explicitement créer une exception pour ce sous-répertoire et le router manuellement via WP (c'est-à-dire, réécrivez-le dans index.php). Par exemple, before le contrôleur frontal existant (en haut du fichier), ajoutez ce qui suit:

RewriteRule ^product/?$ /index.php [L]
1
MrWhite