を使用して正常に動作しますが、代わりにテキストを入力してください(ブラウザのコードが表示される理由です)。したがって、ftpを使用してサーバー上のファイルの名前を再度変更してください。
あなたのサーバがファイル/test.html
URL /test
がアクセスされたとき、あなたは内部、すなわちことを書き直したい奉仕させるために:
RewriteRule ^test[^/]$ test.html
^
は、文字列の先頭に一致するように$
です最後に一致するため、URLがtest
と完全に一致する場合にのみ書き換えます。その要求はtest.html
に書き換えられます。書き換えは内部的なので、ブラウザをリダイレクトしない(アドレスバーのURLは変更されません)。また、ブラウザにリダイレクトされる外部書き換え(ルールに追加された[R]
)もあります。
このルールは、末尾にスラッシュ([^/]
は「スラッシュでない」)が付いていないURLにも一致します。私たちはあとでスラッシュをつけてURLを扱います。
あなたが書き換えたいページごとにカスタムRewriteRule
を作成することができます。
RewriteRule ^foo[^/]$ foo.html
RewriteRule ^bar[^/]$ bar.html
あなたは多くのページを持っている場合、これは多くの作業ですので、あなたは、例えば、すべてのURLを書き換えすることもできますfoo
またはbar
はfoo.html
/bar.html
に書き換え、foo/bar
はfoo/bar.html
に書き換える必要があります。
また、正規表現を使用してすべての要求に一致させることもできます。しかし、まず、foo
が実際にはディレクトリ(index.html
を含むことができ、あなたが提供したいサブディレクトリであるかもしれない)ではないかどうか確認する必要があります。また、foo
が実際にサーバーのファイルシステム上のファイルでないかどうかを確認したいとします。それをチェックするための2つの書き換え条件があります(RewriteCond
directive参照):
今
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
あなたはすべての要求のために書き換えルールを追加することができます。
RewriteRule ^(.+[^/])$ $1.html
$1
は最初のキャプチャグループの内容で、正規表現のキャプチャグループは、()
括弧内に置かれた式です。 .
は任意の文字に一致し、+
修飾語句は「1つ以上」を意味します。
あなたも<request>.html
ファイルが実際のファイルシステム上に存在するかどうかを確認するために書き換え条件を追加する必要があるので、これは、500エラー(see this answer)が得られリライトループを引き起こすことに注意してください:
RewriteCond %{REQUEST_FILENAME}.html -f
また、既に.html
の拡張子を持つURLを書き換えたくない場合もあります。あなたがすでに上記のルールを持っているので、おそらく存在してはならない<file>.html.html
をチェックする必要があるので、私はそれが必要ではないと思います。しかし、あなたはそれに対処する必要があれば、あなたは別の条件を追加することができます。あなたは今、処理する必要がある唯一のものは
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !^.+\.html$ # not really necessary
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+[^/])$ $1.html
されています
RewriteCond %{REQUEST_FILENAME} !^.+\.html$
だからあなたの書き換えルールは次のようになります完全にそれを置きます末尾にスラッシュがあるURL。
が
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [R,L]
このルールは、/
(正規表現/$
)で終わるURLのみと一致し、前にすべてのものをキャプチャ:URLは実際のディレクトリと一致しない場合、そのために私たちはちょうど最後のスラッシュを削除し、簡単な外部の書き換えルールを追加します末尾のスラッシュをグループ(正規表現(.+)
)として指定し、グループ(スラッシュを含まない)にリダイレクトします。規則の背後にあるR
とL
flagsに注意してください。 R
はリダイレクト用で、ブラウザをリダイレクトします(アドレスバーの変更のURL)。 L
は最後のものです。つまり、このルールの後にルールは適用されませんが、ルールは再書き込み後に再び適用されます。これが他のルールが適用される場所です。
TL; DR
RewriteBase/
# handle trailing slashes (if not a directory)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [R,L]
# rewrite rule that internally adds the .html extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+[^/])$ $1.html
元のリンクはどのように見えますか? –
私はあなたのブラウザに 'domain.tld/test'を入力したいと思っていますが、これは' domain.tld/test.html'に内部的に書き直すべきです(ブラウザのアドレスで変更することなくバー)?そして、 'domain.tld/test.html'を' domain.tld/test'にリダイレクトしたいと思いますか?私はそれを行う方法についての答えを書くでしょう。 –