web-dev-qa-db-fra.com

Question sur la règle mod_rewrite pour la redirection des pages défaillantes

Je suis en train de configurer une règle mod_rewrite qui redirige les pages défaillantes vers une page personnalisée "Page introuvable". C'est avec WordPress. J'ai utilisé un didacticiel en ligne du site Apache et jusqu'à présent, mes règles sont les suivantes:

RewriteCond   %{REQUEST_FILENAME} !-f
RewriteRule   ^(.+)   http://example.com/?page_id=254 [R]

Cela marche. Cela semble être une combinaison des première et deuxième suggestions qui ont fonctionné, puisque le drapeau -U ne fait rien.

Ma question est, par curiosité, pourquoi ce qui suit se produit: Lorsque je change de REQUEST_FILENAME en REQUEST_URI (comme le suggère le deuxième exemple), la page se charge, mais aucune des feuilles de style ne se charge. Tout mon formatage est parti, et cela se produit sur chaque page. Quelqu'un peut-il penser à pourquoi cela pourrait arriver?

3
Chris Laplante

Pour configurer des 404 personnalisés, vous devriez pouvoir le faire beaucoup plus facilement (même dans .htaccess), comme ceci:

ErrorDocument 404 http://example.com/?page_id=254

Voir aussi: ErrorDocument

Moins de désordre et beaucoup moins d’utilisation du processeur par requête que mod_rewrite - tout ce que les 404 vont simplement y aller, sans poser de questions. Cependant, je penserais certainement à transformer chaque page errordoc en page statique, surtout si vous l’étendez pour gérer d’autres erreurs (ce n’est pas amusant si votre 500 errordoc génère une erreur 500).

4
tadamson
RewriteCond   %{REQUEST_FILENAME} !-f

Ma question est, par curiosité, pourquoi ce qui suit se produit: Lorsque je change de REQUEST_FILENAME en REQUEST_URI (comme le suggère le deuxième exemple), la page se charge, mais aucune des feuilles de style ne se charge. Tout mon formatage est parti, et cela se produit sur chaque page.

REQUEST_FILENAME et REQUEST_URI contiennent des valeurs différentes dans des fichiers htaccess par répertoire. REQUEST_FILENAME est le chemin d'accès complet du système de fichiers local au fichier, tandis que REQUEST_URI est le composant de chemin d'accès de l'URI demandé (qui n'est pas nécessairement un fichier réel sur le système de fichiers).

-f vérifie si le TestString est un fichier standard, ce que le REQUEST_URI n'est souvent pas - ce qui explique probablement pourquoi les demandes de vos feuilles de style sont redirigées.

Cependant, il semblerait que le REQUEST_URI de votre page principale soit considéré comme un fichier normal (ou que d’autres directives parviennent d’abord à la demande). Cela dépendra de votre structure d'URL et éventuellement d'autres directives dans votre fichier .htaccess.

0
MrWhite

Très étrange. En FF, vous pouvez utiliser Firebug ou Tamper Data pour le débogage. Voir aussi le code source (Ctrl + U) et cliquer sur le lien de la feuille de style. Voir également Error Console (Cntl + Shift + j).

0
alvosu

Si vous parlez de WordPress, il utilise peut-être déjà des redirections pour que REQUEST_URI ne soit pas réglé sur ce que vous attendez - et échoue donc. Par exemple, si elle accède à ?page_id=100, l'URI de la demande peut en fait être une chaîne vide. Même s'il peut utiliser index.php en coulisse, au moment de votre mise en condition, il est probable qu'elle ne soit pas définie.

Vous pouvez activer débogage de mod_rewrite pour voir les différentes étapes effectuées par la correspondance de modèle, et je vous suggère fortement de le faire si vous voulez savoir ce qui se passe. :)

0
Redmumba