我正在使用$this->request->onlyAllow('post', 'delete');
,以便只允许删除来自POST
请求的记录。
问题是我在.htaccess
文件中使用网址重写,并且正在将请求从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规则会介入并广告此操作,从而将其从POST
方法更改为{{ 1}}
生成的动作网址:GET
需要的操作网址:posts/delete/33579
我尝试在posts/delete/33579/
函数中添加斜杠但是Cake会对斜杠进行编码并将其更改为$this->Form->postLink()
。
我正在使用CakePHPH 2.3.1
有关如何解决此问题的任何建议吗?
答案 0 :(得分:2)
这是重定向的标准行为。您有两种选择:
如果请求是POST请求(或只是让它与get请求匹配),则阻止规则匹配。您可以使用%{THE_REQUEST}
RewriteCond %{THE_REQUEST} ^GET\ /
RewriteRule ^(.+)([^/])$ $1$2/ [NE,R=301,L]