Pourquoi RewriteCond% {REQUEST_URI} empêche la deuxième condition pas?
Premièrement, la règle qui fonctionne:
Ça veut dire
et
peut être ouvert uniquement à travers
.
Maintenant le problème est
J'ai ajouté cet ensemble de règles supplémentaires:
Maintenant j'envoie à nouveau POST sur
Mais obtenez cette erreur:
Cela n'a aucun sens, car la règle ne doit pas intercepter des demandes de
En envoyant 403, Mais bien, j'ai développé la deuxième règle comme suit:
Et renvoyer à nouveau POST sur
http://example.com
Ne retourne pas 500, Mais je reçois toujours 403 ?!
Mettre à jour 1
Si je supprime le premier ensemble de règles, le second fonctionnera, comme prévu. Cela signifie seulement
,
et
Vous pouvez accéder.
Mettre à jour 2
Si j'utilise les deux ensembles de règles et envoyer POST sur
Je n'ai pas d'erreur ?!
Ainsi, les règles interfèrent uniquement si j'ai envoyé POST sur la racine URL. Mais pourquoi?
DirectoryIndex index.php
ErrorDocument 403 /form.html
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule . - [F,L]
Ça veut dire
[url=http://example.com]http://example.com[/url]
et
[url=http://example.com/index.php]http://example.com/index.php[/url]
peut être ouvert uniquement à travers
POST
.
Maintenant le problème est
J'ai ajouté cet ensemble de règles supplémentaires:
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule . - [F,L]
Maintenant j'envoie à nouveau POST sur
[url=http://example.com]http://example.com[/url]
Mais obtenez cette erreur:
Forbidden
You don't have permission to access / on this server.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Cela n'a aucun sens, car la règle ne doit pas intercepter des demandes de
index.php
En envoyant 403, Mais bien, j'ai développé la deuxième règle comme suit:
RewriteCond %{REQUEST_URI} !^/form\.html$
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule . - [F,L]
Et renvoyer à nouveau POST sur
http://example.com
Ne retourne pas 500, Mais je reçois toujours 403 ?!
Mettre à jour 1
Si je supprime le premier ensemble de règles, le second fonctionnera, comme prévu. Cela signifie seulement
[url=http://example.com]http://example.com[/url]
,
[url=http://example.com/index.php]http://example.com/index.php[/url]
et
[url=http://example.com/form.html]http://example.com/form.html[/url]
Vous pouvez accéder.
Mettre à jour 2
Si j'utilise les deux ensembles de règles et envoyer POST sur
[url=http://example.com/index.php]http://example.com/index.php[/url]
Je n'ai pas d'erreur ?!
Ainsi, les règles interfèrent uniquement si j'ai envoyé POST sur la racine URL. Mais pourquoi?
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
1 réponses
Giselle
Confirmation de:
En supposant que votre
fixer
Et vous n'avez pas d'autres directives, alors ce sera votre premier bloc de règles qui mène à 403 Forbidden Quand accès
. Le susmentionné permet aux demandes directes POST à
.
DANS
modèle
(Un point) Dans l'exemple ci-dessus, interdit le traitement des règles pour les demandes de
. mod_dir Puis initie la sous-requête interne sur
. Veuillez noter que cette sous-requête ressemble en fait à une demande interne. GET (Qu'est-ce que
La variable de serveur est installée dans), Par conséquent, la condition ci-dessus (
) Avec succès, et la demande est finalement interdite.
Il serait préférable de canoniser la demande et de rediriger (308 - Redirection permanente avec la préservation de la méthode de la requête) Toute demande de
à
. Ensuite, vous pouvez vous concentrer sur la comparaison seulement
et peut ignorer les sous-requêtes.
(Pas besoin de
Drapeau quand
Utilisé.
Membres.)
Avant de tester, assurez-vous que le navigateur est nettoyé. (Peut-être qu'il est préférable de vérifier avec
(Temporaire) Redirection pour éviter la mise en cache.)
Comme vous supposez que cela ne contredit pas les règles ci-dessus, cela correspond à quoi que ce soit, mais
et
(En utilisant B.
). Ainsi, il interdit l'accès à toutes les autres URL, quelle que soit la méthode de la requête. (Comme mentionné ci-dessus, il semble que c'est la première règle qui a commencé 403 En accédant à K.
.) Si vous avez inclus une exception pour vos documents d'erreur, comme décrit ci-dessus, vous n'avez pas besoin d'ajouter une condition supplémentaire.