Переписать Удалить ссылку Href - PullRequest
0 голосов
/ 06 апреля 2020

Я боролся с этим правилом перезаписи в течение нескольких дней, я искал здесь и пробовал много разных правил переписывания, я не уверен, что мне не хватает.

это мой PHP запрос к база данных.

<?php
if (isset($_GET['delete'])){

    $ServerID = $_GET['delete'] ;

    $db = dbconnect();
    $stmt = $db->prepare("DELETE FROM servers WHERE ID = $ServerID");
    $stmt->execute();
    $stmt->close();

   }
?>

Моя HTML ссылка, которая удаляет запись для меня

 <a href="servers.php?delete='.$ServerID.'">Delete</a>

, и когда вы наводите указатель мыши на вышеуказанную ссылку, она выглядит следующим образом

http://example.com/servers.php?delete=12

В моем .htaccess я использовал скрипт для удаления. php в конце и использовал следующее правило перезаписи

RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,L]

, а затем изменил мою ссылку HTML на следующую

<a href="servers/delete/'.$ServerID.'">Delete</a>

теперь, когда я наведу ссылку, я вижу, что она переписывает строку в эту

http://example.com/servers/delete/12

, но когда я щелкаю по ней, она не удаляет запись, она поднимает URL, как страницу, когда все это должно сделать, это удалить запись

1 Ответ

0 голосов
/ 06 апреля 2020

В соответствии с вашим комментарием к вопросу, который вы узнали из файла журнала ошибок сервера http, реальная проблема заключается в перезаписи l oop, созданной вами по правилу перезаписи.

Реальное правило, которое вы реализовали, прекрасно. Но вы должны позаботиться о том, чтобы он применялся только в том случае, если запрос еще не указывает на цель перезаписи:

RewriteEngine on
RewriteCond %{REQUEST_URI} ! /servers\.php$
RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,L]

Однако гораздо более простой подход - использовать флаг END вместо старого Флаг L в самом правиле:

RewriteEngine on
RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,END]

См. Документацию модуля перезаписи, чтобы понять разницу: https://httpd.apache.org/docs/current/mod/mod_rewrite.html

И общее замечание: Вы должны всегда предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования распределенных файлов конфигурации (".htaccess"). Эти распределенные файлы конфигурации добавляют сложность, часто являются причиной непредвиденного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

...