2010-01-14 6 views
0

Je tente de verrouiller une page pour accepter uniquement les requêtes POST. dans le cadre d'une API RESTful. J'ai ce qui suit, mais cela ne semble pas fonctionner. Toute aide serait appréciée.Utilisation de RewriteRule dans .htaccess pour la requête POST

RewriteCond %{REQUEST_METHOD} POST 
RewriteRule ^api/(call1|call2|call3)/?/ http://www.example.com/api/rest_services.php?_call=$1 [L] 
+0

Comment est-il ne fonctionne pas? Concrètement, cela ne bloque-t-il rien, ou tout? –

+0

Donne une réponse 404 –

Répondre

1

Mon erreur. Erreur de syntaxe sur la RewriteRule. Devrait être le suivant. Notez le $ non /

RewriteRule ^api/(call1|call2|call3)/?$ http://www.example.com/api/rest_services.php?_call=$1 [L] 
2

Je ne suis pas qualifié pour répondre à la question sur .htaccess, mais c'est la façon dont je préfère le faire de toute façon:

<?php 

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { 
    die('some meaningful REST style error here'); 
} 
+0

oui. vos utilisateurs seront beaucoup plus heureux et moins mystifiés si vous avez un message d'erreur. –

+0

Merci et d'accord. Mais il existe d'autres facteurs qui soutiennent une solution RewriteRule. De plus, c'est une mission maintenant. –

8

Vous devez inverser la condition pour correspondre simplement les demandes qui ne sont pas POST:

RewriteCond %{REQUEST_METHOD} !=POST 
RewriteRule ^api/(call1|call2|call3)/?/ - [L,R=405] 

Et puis, vous devez envoyer le 405 status code à dire au client la raison. Mais l'indicateur R=405 n'est disponible que depuis Apache 2. Pour Apache 1, vous pouvez envoyer ces requêtes à un script PHP qui répond avec ce code d'état.

0

Utilisez cette option conjointement avec <Location>:

<Limit GET> 
    Deny from all 
</Limit>