تتعارض إعادة كتابة عنوان URL الخاص بـ CakePHP مع CakeRequest::onlyAllow

StackOverflow https://stackoverflow.com//questions/24043115

سؤال

انا استخدم $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]
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top