Comment puis-je ignorer un répertoire dans mod_rewrite?
J'essaie d'avoir le modrewrite règles de sauter le répertoire vip
. J'ai essayé un certain nombre de choses que vous pouvez voir ci-dessous, mais en vain.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteRule ^vip$ - [PT]
RewriteRule ^vip/.$ - [PT]
#RewriteCond %{REQUEST_URI} !/vip
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Comment puis-je obtenir modrewrite d'ignorer totalement la /vip/
répertoire de sorte que toutes les demandes passent directement dans le dossier?
Mise à jour:
Comme des points de clarté:
- Il est hébergé sur Dreamhost
- Les dossiers sont dans un répertoire de wordpress
- l' /vip/dossier contient un webdav .htaccess etc (même si je ne pense pas que ce est important
- Sur apache 2.2, vous pourriez avoir besoin
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
de lire ce stackoverflow.com/a/12575089/516748
Vous devez vous connecter pour publier un commentaire.
Essayez de mettre ce avant toutes les autres règles.
Il correspond à toute URI début
vip
.-
signifie ne rien faire.L
signifie que ce devrait être la dernière règle; ignorer tout ce qui suit.NC
signifie le non-cas ("VIP" est également assortie).Remarque qu'elle correspond à tout ce début
vip
. L'expression^vip$
correspondent àvip
mais pasvip/
ouvip/index.html
. Le$
est peut-être votre chute. Si vous voulez vraiment vous le faites correctement, vous pouvez aller avec^vip(/|$)
afin de ne pas correspondre àvip-page.html
RewriteRule ^vip/? - [L,NC]
de prendre soin de la barre oblique problème?^vip
. Il pourrait correspondre à "vip", suivi d'une barre oblique (peut-être) et de quelques autres personnages (peut-être). Nous voulons match "vip" exactement (^vip$
) ou n'importe quelle chaîne qui commence par "vip/" (^vip/
).RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
ne fonctionnent pas. Le répertoire en question a un de spécial .htaccess qui est à l'origine d'une erreur, la même chose se produira avec un mot de passe répertoire protégé.Ceci dit si c'est un fichier ou d'un répertoire de ne pas y toucher. Vous devriez être en mesure d'accéder à site.com/vip et pas de règle de réécriture doit avoir lieu.
Le code que vous ajoutez, et toutes les réponses que fournissent les règles de Réécriture/conditions sont inutiles! La valeur par défaut de WordPress, le code déjà fait tout ce que vous avez besoin de:
Ces lignes dire "si ce n'est PAS un fichier existant (
-f
) ou répertoire (-d
), passer à WordPress. L'ajout de règles, pas de la matière spécifique ou ils sont bons, est redondant--vous devriez déjà être couverts par le WordPress règles!Alors, pourquoi ne sont-ils pas de travail???
La
.htaccess
dans levip
répertoire est de lancer une erreur. La même chose arrive si vous avez le mot de passe protéger un répertoire.Voici la solution:
Insérer ces lignes avant de le WordPress code, et ensuite créer /err.txt. De cette façon, quand elle vient sur votre WebDAV (ou protégé par mot de passe répertoire) et échoue, il va aller à ce fichier, et de se laisser prendre par l'existant par défaut de WordPress condition (
RewriteCond %{REQUEST_FILENAME} !-f
).En résumé, la solution finale est:
Que j'ai posté plus sur la cause de ce problème dans ma situation spécifique, impliquant WordPress et WebDAV sur Dreamhost, dont j'attends beaucoup d'autres à avoir sur mon site.
Vous l'avez mentionné, vous avez déjà une .htaccess dans le répertoire que vous voulez ignorer - vous pouvez utiliser
Dans que .htaccess pour arrêter l'utilisation de mod_rewrite (pas sûr si vous êtes à l'aide du module mod_rewrite dans ce dossier, si vous êtes, alors ce qui n'aidera pas puisque vous ne pouvez pas l'éteindre).
Essayez de remplacer cette partie de votre code:
...avec les éléments suivants:
Qui devrait corriger les choses.
est la façon de le faire.
J'ai eu le même problème à l'aide de wordpress et a constaté que le problème est lié à ne pas avoir un bon gestionnaire pour 401 et 403 erreurs..
Ces conditions sont déjà censés ne pas réécrire l'url de dossiers existants mais ils ne font pas leur travail pour protégé par mot de passe des dossiers. Dans mon cas, en ajoutant les deux lignes suivantes à la racine de mes .htaccess résolu le problème:
Bien sûr, vous avez besoin pour créer l' /misc/myerror.html,
Cela fonctionne ...
Mais de s'assurer qu'elle est la première règle après
RewriteEngine on
c'est à dire
Dans mon cas, la réponse par brentonstrine (et je ne vois matdumsa également eu la même idée) a été le bon... je voulais à droit de vote de leurs réponses, mais étant nouveau ici, je n'ai pas de "réputation", donc je dois écrire une réponse, afin de souligner ce que je pense est la véritable clé ici.
Plusieurs de ces réponses serait de réussir à cesser de l'WordPress index.php d'être utilisé ... mais dans de nombreux cas, la raison pour cela est qu'il existe un répertoire réel avec de vraies pages que vous souhaitez afficher directement, et le
lignes déjà prendre soin de cela, de sorte que la plupart de ces solutions sont une source de distraction dans un cas comme le mien.
La clé a été brentonstrine de idée que l'erreur était un effet secondaire causé par le mot de passe de protection à l'intérieur du répertoire, j'essayais d'afficher directement. En mettant dans la
lignes et de créer des pages d'erreur (en fait, je créé err401.html et err403.html et plus complète des messages d'erreur) j'ai arrêté la réponse 404 être généré lorsqu'il ne trouve pas de n'importe quelle page à afficher pour 401 Authentification Requise, puis le dossier a fonctionné comme prévu... montrant un apache boîte de dialogue de connexion, puis le contenu du dossier, ou en cas d'échec, mon erreur 401 page.
Je ne suis pas sûr si je comprends bien votre objectif, mais la suite de pouvoir faire ce que vous êtes après?
Ce sera la cause d'une URL telle que http://www.example.com/vip/fred.html être réécrit sans /vip.