Pergunta

estou usando $this->request->onlyAllow('post', 'delete'); de modo a permitir apenas a exclusão de registros provenientes de um POST solicitar.

O problema é que estou usando a reescrita de URL no meu .htaccess arquivo e está alterando a solicitação de um POST para um GET

Isso é o que meu .htaccess arquivo se parece com:

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine On
    RewriteBase /example

    RewriteRule ^homes/$    http://dev.example.com/          [R=301,L]    

    # if this is an existing folder/file then leave
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule . - [L]

    # if no trailing slash then redirect to url with trailing slash
    RewriteRule ^/?(.+)([^/])$ $1$2/ [NE,R=301,L]

    # internal rewrite to controller/dispatcher index.php
    RewriteRule ^.*$ index.php [L,QSA]
</IfModule>

estou usando o postLink FormHelper para gerar um botão de exclusão:

<?php 
    echo $this->Form->postLink(__('Delete'), 
    array('
        controller'=>'posts', 
        'action' => 'delete',), 
    null, 
    __('Are you sure you want to delete "%s?"', $attachment['Post']['name'])); 
?>

O problema é que a ação para o formulário gerado a partir do auxiliar ainda não possui a barra final, então a regra htaccess entra em ação e anuncia isso, o que essencialmente muda isso de um POST método para um GET

URL de ação gerado: posts/delete/33579URL de ação necessário: posts/delete/33579/

Eu tentei adicionar uma barra no $this->Form->postLink() função, no entanto, o Cake codifica a barra e a altera para um %2F.

Estou usando o CakePHPH 2.3.1

Alguma sugestão sobre como consertar isto?

Foi útil?

Solução

Este é o comportamento padrão para um redirecionamento.Você tem duas opções:

  • Corrigindo a URL que é gerada.Este é o mais sensato, como você provavelmente pode imaginar
  • Impedir que a regra corresponda se a solicitação for uma solicitação POST (ou apenas permitir que ela corresponda a uma solicitação get).Você pode fazer isso com %{THE_REQUEST}

    RewriteCond %{THE_REQUEST} ^GET\ /
    RewriteRule ^(.+)([^/])$ $1$2/ [NE,R=301,L]
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top