Donc, sur mon site, mon panier se trouve à l'adresse example.com/zc2
J'utilise ce fichier .htaccess
RewriteEngine On
Redirect /index.html example.com/zc2/
Ainsi, toute personne qui atterrira sur example.com
sera redirigée vers mon panier.
Tout va bien, mais maintenant, si j'essaie d'installer WordPress sur example.com/wp
, les navigateurs restent bloqués dans une boucle de redirection.
Je suis certain que c'est mon fichier .htaccess mal conçu.
Que puis-je faire pour résoudre ce problème?
RewriteEngine On Redirect /index.html example.com/zc2/
De côté: Je suppose que cela doit être une "faute de frappe" dans votre question, mais cette directive mod_alias Redirect
est complètement invalide (il vous manque un protocole de l'URL cible) serveur avec une erreur de serveur interne 500 - "Rediriger vers une non-URL" !?
De plus, RewriteEngine
(mod_rewrite) et Redirect
(mod_alias) sont des directives non liées de différents modules Apache.
Que puis-je faire pour résoudre ce problème?
Cependant, je soupçonne que la "boucle de redirection" pourrait être causée par un fichier WordPress .htaccess
mal configuré dans le sous-répertoire /wp
. Si vous réécrivez par inadvertance dans la racine du document au lieu du sous-répertoire /wp
, vous obtiendrez une boucle de redirection.
La directive Redirect
est également "préfixe-correspondant" - elle correspond à toute URL qui commence par l'URL source. Si vous envisagez de rediriger un chemin spécifique (c'est-à-dire la racine du document), il serait préférable d'utiliser une directive RedirectMatch
(ou mod_rewrite RewriteRule
- voir plus loin). Par exemple:
RedirectMatch 302 ^/(index\.html)?$ https://example.com/zc2/
Ceci ne fait plus que correspondre à /
(ou /index.html
) et redirige vers example.com/zc2/
.
RewriteRule
) à la placeLa directive mod_alias (Redirect
ou RedirectMatch
) du fichier racine du document .htaccess
est toujours traitée (héritée) lorsqu'il existe d'autres fichiers .htaccess
dans les sous-répertoires (c'est-à-dire le fichier WordPress _ /wp/.htaccess
fichier).
Pour éviter que le fichier redirect dans le fichier racine .htaccess
interfère avec votre installation WordPress, puis modifiez le mod_alias Redirect
(ou RedirectMatch
) dans le fichier racine de votre document .htaccess
dans un fichier mod_rewrite RewriteRule
.
Par exemple:
RewriteEngine On
RewriteRule ^(index\.html)?$ https://example.com/zc2/ [R=302,L]
Les directives mod_rewrite du fichier WordPress .htaccess
situé à /wp/.htaccess
écraseront complètement les directives mod_rewrite du fichier parent .htaccess
(à la racine du document), évitant ainsi toute possibilité de conflit. Les directives mod_rewrite du fichier racine .htaccess
ne sont même pas traitées.
(Notez que cela dépend du comportement par défaut d'Apache, où les directives mod_rewrite ne sont pas héritées.)
Considérant que, lorsqu'un mod_alias Redirect
est utilisé, la directive mod_alias du fichier parent .htaccess
est toujours traitée (qu’elle corresponde ou non) - conflit possible.
Si vous accédez à example.com/
, la redirection vers example.com/zc2/
se produit toujours.
Notez que j'ai utilisé les redirections 302 (temporaires) ci-dessus. Modifiez-les en 301 (permanent) - si tel est l'intention - uniquement lorsque vous avez confirmé que tout fonctionne correctement. Ceci permet d'éviter tout problème de cache potentiel.
Il ne devrait pas être nécessaire d'utiliser une règle ou une condition de redirection, car vous redirigez simplement la base vers un sous-dossier et, par conséquent, ces sous-dossiers, s'ils sont liés, n'auraient pas besoin de la redirection.
Essayez quelque chose comme ceci dans le fichier /.htaccess
:
Redirect 301 / https://example.com/zc2/
alors ceci dans votre fichier /WordPress/.htaccess
:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /WordPress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress