He estado luchando con esta regla de reescritura durante unos días, he buscado aquí y probé muchas reglas de reescritura diferentes. No estoy seguro de lo que me estoy perdiendo.
esta es mi solicitud de PHP a la base de datos.
<?php if (isset($_GET['delete'])){ $ServerID = $_GET['delete'] ; $db = dbconnect(); $stmt = $db->prepare("DELETE FROM servers WHERE ID = $ServerID"); $stmt->execute(); $stmt->close(); } ?>Mi enlace HTML que elimina el registro para mí
<a href="servers.php?delete='.$ServerID.'">Delete</a>y cuando pasa el cursor sobre el enlace anterior, se muestra de la siguiente manera
http://example.com/servers.php?delete=12en mi .htaccess usé el script para eliminar el .php al final y usé la siguiente regla de reescritura
RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,L]y luego cambié mi enlace HTML a lo siguiente
<a href="servers/delete/'.$ServerID.'">Delete</a>ahora, cuando muevo el enlace, puedo ver que vuelve a escribir la cadena en esto
http://example.com/servers/delete/12pero cuando hago clic en él, no elimina el registro, muestra una URL como una página cuando todo lo que debería hacer es eliminar el registro
De acuerdo con su comentario a la pregunta, aprendió del archivo de registro de errores del servidor http que el problema real es un bucle de reescritura que creó con su regla de reescritura.
La regla real que implementó está perfectamente bien. Pero debe tener cuidado de que solo se aplique si la solicitud no apunta al objetivo de reescritura:
RewriteEngine on RewriteCond %{REQUEST_URI} ! /servers\.php$ RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,L] Sin embargo, un enfoque mucho más fácil sería usar el indicador END en lugar del indicador L anterior en la regla misma:
RewriteEngine on RewriteRule ^servers/delete/(\d+)$ servers.php?delete=$1 [NC,END]Consulte la documentación del módulo de reescritura para comprender la diferencia: https://httpd.apache.org/docs/current/mod/mod_rewrite.html
Y una observación general: siempre debe preferir colocar tales reglas en la configuración del host de los servidores http en lugar de usar archivos de configuración distribuidos (".htaccess"). Esos archivos de configuración distribuidos agregan complejidad, a menudo son la causa de un comportamiento inesperado, difíciles de depurar y realmente ralentizan el servidor http. Solo se proporcionan como última opción para situaciones en las que no tiene acceso a la configuración de host de los servidores http reales (léase: proveedores de servicios realmente baratos) o para aplicaciones que insisten en escribir sus propias reglas (lo que es una pesadilla de seguridad obvia).