質問

$this->request->onlyAllow('post', 'delete');要求から来るレコードの削除のみを許可するようにPOSTを使用しています。

問題は、.htaccessファイルでURLの書き換えを使用しており、POSTからGETへの要求を変更していることです。

これは私の.htaccessファイルのようなものです。

<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>
.

postLink FormHelperを使用して削除ボタンを生成しています:

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

問題は、ヘルパーから生成されたフォームのアクションがまだ末尾のスラッシュを持っていないため、HTACCESSルールのステップINおよびADSこれはPOSTメソッドからGET

への依然としてこれを変更することです。

生成されたアクションURL:posts/delete/33579 必要なアクションURL:posts/delete/33579/

$this->Form->postLink()関数にスラッシュを追加しようとしましたが、ケーキはスラッシュを符号化し、それを%2Fに変更します。

私はCakePhph 2.3.1

を使っています

これを修正する方法についての提案は?

役に立ちましたか?

解決

リダイレクトの標準的な動作です。あなたは2つのオプションを持っています:

  • 生成されたURLを修正します。
  • を想像できるように、これは最も賢明なものです。
  • 要求が後要求の場合にルールが一致するのを防ぐ(またはGET要求と一致させるだけ)。%{THE_REQUEST}

    でこれを行うことができます。
    RewriteCond %{THE_REQUEST} ^GET\ /
    RewriteRule ^(.+)([^/])$ $1$2/ [NE,R=301,L]
    

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top