4

htaccess-fileを使用して、サイトのURLのレイアウトを構成します。

現時点で問題なのは、フォームを送信できなくなったことです。

まったく同じコードを含む2つのファイルがあります(コピーして名前を変更します)。呼び出すとpage1.php、URLはとして表示されpage1.phpます。ログインしようとしたり、エラーが発生したりする間は、すべて正常に動作します。今、私が呼び出すときindex.php(それは同じコードを持っています!)、それがするべきであるようにURLにhtaccess隠れます!index.phpしかし、ログインスクリプトをテストすると、フォームを投稿しても何も起こりません。サイトを更新するだけです。だから私はなぜこれが起こっているのか分かりませんか?

htaccessこの動作は、リライトルールを介して明確に引き起こされます。削除htaccessして再試行しました。それがなくても動作しますが、それでもこの醜いURLがあります。

何が入っているかを示して大丈夫htaccess

RewriteEngine On

RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule ^.*\.html$ %1.php [L]  

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php

AddType application/x-httpd-php .htm .html

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

RewriteRule ^index\.(htm|html|php) http://www.domain.com/ [R=301,L]
## rewrite the index file in subdirectories
RewriteRule ^(.*)/index\.(htm|html|php) http://www.domain.com/$1/ [R=301,L]

フォームは次のように送信されます。

form action = "<?php echo $_SERVER['PHP_SELF']?>" method= "post"...

ですから、私を助けてくれる人がいたら、本当にありがたいです。

アップデート:

私が達成したいことをさらに情報を与えるために:

まず、構造は次のとおりです。言語が異なるため、ルート構造は次のようになります。

www.domain.com/languagefolder/...

これで、ユーザーが電話www.domain.comをかけているときに、にリダイレクトされますlanguagesubfolder。このサブフォルダのインデックスページにリダイレクトされている間、最初www.domain.com/languagesfolder/index.phpに表示されるのは表示されないため、表示されないようにする必要がありwww.domain.com/languagesfolder/ます。それは自動的に行われます。それはいいです。ただし、呼び出すときは、ユーザーが表示できないようwww.domain.com/languagesfolder/index.phpに書き直す必要があります。これはより専門的なようです。www.domain.com/languagesfolder/.../index.php

次のことは、ファイル拡張子が表示されないようにする.../page代わりに、ユーザーが入力するだけでよいように、次のページにリンクが与えられることです。.../page.php最後になりましたが、最後になりますが、ユーザーがファイルの種類を調べようとするときに、拡張子を書き直してSQLインジェクションを防ぎ、ユーザーがまたはと入力できるように.../page.php.../page.htmlます.../page.htm

4

4 に答える 4

4

使用:

form action = "<?php echo $_SERVER['PHP_SELF']?>" method= "post"...

フォームを投稿すると、次のような結果になる可能性があります。

form action = "/index.php" method = "post"...

あなたのコードで。回線に問題がある理由:

RewriteRule ^index\.(htm|html|php) http://www.domain.com/ [R=301,L]

投稿先の index.php をキャッチして、投稿データなしでhttp://www.domain.com/ にリダイレクトするということですか。

Firefox を使用していて、firebug がインストールされている場合は、フォームを送信する前にネット パネルを表示して [持続] をクリックすることで、これがリアルタイムで発生していることを確認できます。POST /index.php の 301 リダイレクトに続いて、http://www.domain.com/の GET が表示されます。

これは、次の行を置き換えることで修正できます。

form action = "<?php echo $_SERVER['PHP_SELF']?>" method= "post"...

と:

form action = "/" method= "post"...

また:

form action = "<?php echo rtrim($_SERVER['PHP_SELF'], 'index.php'); ?>" method= "post"...

これは str_replace を使用するのと同じですが、「index.php」の右端のオカレンスのみを削除します。

HTH。

于 2013-03-06T15:17:21.170 に答える
0

クエリ文字列も転送するには、ルールにQSA RewriteRule フラグを追加する必要があります。そうしないと、クエリ文字列が破棄されます。Lまた、ほとんどの場合、規則が満たされるとそれ以上の規則が処理されないようにするフラグを使用することも、適切な方法であり、正気を保つのに役立ちます。同時に複数のルールを台無しにしたくはありません。別々301のルールを作成し、リダイレクトが戻ってきたときに対処する必要があります。

RewriteRule ^(.*)$ $1.php [L,QSA]

問題は解決しましたか?

nJoy!

于 2013-03-04T00:21:50.600 に答える
0

あなたの問題はあなたのものではないようです.htaccess。これが私が試したものです。

.htaccess:

RewriteEngine On
RewriteBase /stackoverflow/15032042

RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule ^.*\.html$ %1.php [L]  

# I don't understand this RewriteRule
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php

AddType application/x-httpd-php .htm .html

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

RewriteRule ^index\.(htm|html|php)$ http://www.workspace.domain.tld/stackoverflow/15032042/ [R=301,L]
RewriteRule ^(.*)/index\.(htm|html|php) http://www.workspace.domain.tld/stackoverflow/15032042/$1/ [R=301,L]

index.php:

if(isset( $_POST))
    var_dump($_POST);
echo '<form action="" method="POST"><input type="hidden" name="test" value="1" /><input type="submit" /></form>';

次に、フォームをヒットhttp://www.workspace.domain.tld/stackoverflow/15032042/して送信すると、$_POST正しく表示されます。

または、サブフォルダーのことを考えていなかったのでしょRewriteBaseうか?

于 2013-03-03T15:10:01.017 に答える
0

.htaccess を見て説明を読むと、何をしようとしているのかが少しわかりにくいようです。あなたはきれいな URL を望んでいるように思えますが (つまり、ファイル拡張子を決して表示しない)、それでも index.php などへの投稿について話しています。クリーンな URL を使用したい場合は、全体でクリーンな URL を使用する必要があります (つまり、投稿先/ではなく/index.php)。

AddTypeすべてのリクエストはクリーンな URL 経由で行われるため、拡張子が .htm または .html のファイルをリクエストしてはならないため、.htaccess から宣言を削除する必要があります。リクエストに応じてリダイレクトを実行する必要はありませんが*.index、おそらくレガシー ユース ケース (サイトへの外部リンク用) として使用する場合を除きます。

.htaccess を次のように単純化できるはずです。

RewriteEngineOn
# redirect legacy index links. Do this first to clean up URL. No need to use full URL here unless directly to different domain
RewriteRule ^(.*)index\.(html|htm|php)$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [L]
于 2013-02-22T20:04:30.707 に答える