Método PHP = “publicación” dejó de funcionar después de que agregué este .htaccess … ¿Por qué?

He agregado este .htaccess para eliminar la extensión de archivo de la URL, así que en lugar de “index.php“, solo se mostrará “índice”, todas las veces. Pero después de que lo hice, mi dejó de funcionar

 Options +FollowSymLinks -MultiViews Options +Indexes AcceptPathInfo Off RewriteEngine on RewriteBase / #Force from http to https RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTP_HOST} !^mysite.com$ RewriteRule ^(.*)$ https://mysite.com/$1 [R=301] #take off index.html RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC] RewriteRule . http://www.%{HTTP_HOST}%1 [R=301,NE,L] ## hide .php extension # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] ## To internally redirect /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [L] ## hide .html extension # To externally redirect /dir/foo.html to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.html [NC] RewriteRule ^ %1 [R,L,NC] ## To internally redirect /dir/foo to /dir/foo.html RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [L] 

Aquí hay un ejemplo:

 /* Worked before .htaccess, but not anymore */  /* Removing .php from action works. But there are hundreds of files and this method is not very trustworthy */  

PD: Si uso reglas regulares de .htaccess, como esta:

RewriteRule ^ index $ ./index.php [L, NC]

No ocultará .php en todos los casos.

Esto está sucediendo porque estás redirigiendo aquí:

 ## hide .php extension # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] 

Cuando redirecciona, el BODY de solicitud no siempre se incluye, puede intentar agregar una excepción para POST:

 ## hide .php extension # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{REQUEST_METHOD} !POST [NC] RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] 

Porque la action de tu formulario apunta a /pwreset.php . Cuando intenta ir a esa página (incluso a través de una publicación de formulario), htaccess lo redireccionará a /pwreset antes de que se /pwreset cualquier código PHP. Una redirección eliminará los datos POST de la nueva solicitud.

Vas a tener que cambiar todas esas acciones de formulario para tener la versión no php. Como solución a corto plazo, intente excluir las solicitudes POST de su regla de redirección

RewriteCond %{REQUEST_METHOD} !POST