Donc, j'essaye cela depuis longtemps, mais je n'arrive pas à le faire fonctionner. Prétendez que mon site Web est https://example.com
, avec les pages supplémentaires https://example.com/abc
et https://example.com/abc-def-g
. Il est prévu que toutes les pages, qu'elles existent ou non, soient automatiquement redirigées vers la page d'accueil, à l'exception des deux pages répertoriées ci-dessus.
Tout ce que j'ai essayé a échoué, que ce soit pour m'empêcher d'accéder au site Web ou pour ne rien faire du tout. J'essaie donc de recommencer à zéro.
C'est le fichier .htaccess
en ce moment:
# 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
# BEGIN EWWWIO
# END EWWWIO
Ceci est le fichier standard pour WordPress. Toute aide serait très appréciée!
Essayez ce qui suit, before les directives WordPress existantes:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^(abc|abc-def-g)$ / [R,L]
Cela indique que pour toute URL autre que /abc
ou /abc-def-g
et qui ne correspond pas à un fichier ou à un répertoire physique (c'est-à-dire vos ressources statiques, vos images, CSS, JS, etc.), redirigez-la ensuite vers la page d'accueil.
Le préfixe !
sur la RewriteRule
pattern annule la regex.
Ceci est une redirection temporaire (302).
Vous n'avez pas besoin de répéter la directive RewriteEngine On
.
UPDATE: Si vos URL se terminent par une barre oblique finale, vous devez modifier la variable RewriteRule
pattern :
RewriteRule !^(abc|abc-def-g)/$ / [R,L]
Ou, rendre la barre oblique finale facultative:
RewriteRule !^(abc|abc-def-g)/?$ / [R,L]
Une autre façon d’écrire la même chose est (comme vous l’avez mentionné dans les commentaires) d’utiliser les directives RewriteCond
pour vérifier la variable serveur REQUEST_URI
au lieu de RewriteRule
pattern . Cela pourrait être plus facile à lire, cependant, il est légèrement moins efficace puisque RewriteRule
pattern est toujours traité en premier. Par exemple:
RewriteCond %{REQUEST_URI} !^/abc/?$
RewriteCond %{REQUEST_URI} !^/abc-def-g/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]
Quel est le même que (en alternance):
RewriteCond %{REQUEST_URI} !^/(abc|abc-def-g)/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]