6

この .htaccess を追加して、URL からファイル拡張子を削除したので、代わりに "index.php" が表示され、常に "index" のみが表示されます。しかし、私がそれをした後、私<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} ^[A-Z]{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} ^[A-Z]{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を非表示にするわけではありません

4

2 に答える 2

7

これは、ここにリダイレクトしているためです。

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{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} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
于 2013-11-05T19:04:53.533 に答える
5

actionフォームの が を指しているためです/pwreset.php。そのページに移動しようとすると (フォーム投稿を介しても)、/pwresetPHP コードが実行される前に htaccess によってリダイレクトされます。POSTリダイレクトは、新しいリクエストからのデータを削除します。

これらすべてのフォーム アクションを非 PHP バージョンに変更する必要があります。短期的な修正として、リダイレクト ルールから POST リクエストを除外してみてください

RewriteCond %{REQUEST_METHOD} !POST

于 2013-11-05T19:06:59.057 に答える