Я добавил этот .htaccess, чтобы удалить расширение файла из URL-адреса, поэтому вместо «index.php» он будет показывать только «индекс», все время. Но после того, как я это сделал, мой <form method="post">
прекратил работу
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]
Вот пример:
/* Worked before .htaccess, but not anymore */ <form method="post" action="pwreset.php" class="form-stacked"> /* Removing .php from action works. But there are hundreds of files and this method is not very trustworthy */ <form method="post" action="pwreset" class="form-stacked">
PS: Если я использую обычные правила .htaccess, например:
RewriteRule ^ index $ ./index.php [L, NC]
Он не будет скрывать .php во всех случаях
Это происходит потому, что вы перенаправляетесь сюда:
## 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]
При перенаправлении запрос BODY не всегда включается, вы можете попробовать добавить исключение для 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]
Потому что action
вашей формы указывает на /pwreset.php
. Когда вы пытаетесь перейти на эту страницу (даже через сообщение формы), htaccess перенаправит вас на /pwreset
до /pwreset
любого PHP-кода. Переадресация удалит любые POST
данные из нового запроса.
Вам придется изменить все эти действия формы, чтобы иметь версию без PHP. Как кратковременное исправление, попробуйте исключить POST-запросы из вашего правила перенаправления
RewriteCond %{REQUEST_METHOD} !POST