CakePHPのURLの書き換えCakeRequest :: onlyAllow
-
21-12-2019 - |
質問
$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]
所属していません StackOverflow