تتعارض إعادة كتابة عنوان URL الخاص بـ CakePHP مع CakeRequest::onlyAllow
-
21-12-2019 - |
سؤال
انا استخدم $this->request->onlyAllow('post', 'delete');
وذلك للسماح فقط بحذف السجلات التي تأتي من ملف POST
طلب.
المشكلة هي أنني أستخدم إعادة كتابة عنوان URL في ملفي .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
طريقة إلى أ GET
عنوان URL للإجراء الذي تم إنشاؤه: posts/delete/33579
عنوان URL للإجراء المطلوب: posts/delete/33579/
لقد حاولت إضافة شرطة مائلة في $this->Form->postLink()
وظيفة ولكن يقوم Cake بتشفير الخط المائل وتغييره إلى a %2F
.
أنا أستخدم CakePHPH 2.3.1
أي اقتراحات حول كيفية إصلاح هذا؟
المحلول
هذا هو السلوك القياسي لإعادة التوجيه.لديك خياران:
- إصلاح عنوان URL الذي تم إنشاؤه.هذا هو الأكثر منطقية، كما يمكنك أن تتخيل على الأرجح
منع القاعدة من المطابقة إذا كان الطلب عبارة عن طلب POST (أو دعه يتطابق مع طلب الحصول فقط).يمكنك القيام بذلك مع
%{THE_REQUEST}
RewriteCond %{THE_REQUEST} ^GET\ / RewriteRule ^(.+)([^/])$ $1$2/ [NE,R=301,L]