URL からファイル拡張子を自動的に削除する方法はありますか?
例:
ユーザーの種類
www.website.com/page.html
ページを次のように自動的に変換します。
www.website.com/page
可能であれば/
、
www.website.com/page/
.htaccess
URL にファイル拡張子の書き換えを強制することは、自動的に行う必要があります。
URL からファイル拡張子を自動的に削除する方法はありますか?
例:
ユーザーの種類
www.website.com/page.html
ページを次のように自動的に変換します。
www.website.com/page
可能であれば/
、
www.website.com/page/
.htaccess
URL にファイル拡張子の書き換えを強制することは、自動的に行う必要があります。
あなたはこれを間違った方法でやろうとしています。拡張機能を削除したくありません。拡張子のないリクエストを実ファイルに書き換えたい。したがって、ユーザータイプの場合
http://foo.bar/file
サーバーは要求どおりに機能します
http://foo.bar/file.html
これを行うには、必要に応じmod_rewrite
て(または同等の)書き換えルールを設定します。同じモジュールを使用して、URL の見栄えを良くすることもできます。
http://foo.bar/script.php?id=34&smth=abc
あなたが持つことができます
http://foo.bar/script/id/34/smth/abc
あるいは
http://foo.bar/script/34/abc
これを .htaccess で使用します (index.php がページを処理しています):
RewriteRule ^home/$ index.php?page=home
// Result: http://domain.com/home/
より動的にしたい場合:
RewriteRule ^(.*)/$ index.php?page=$1
// Result: http://domain.com/any-page/
ページをリクエストするときに必要になる可能性のある追加データについては、次のようにします。
RewriteRule ^(.*)/(.*)/$ index.php?page=$1&id=$2
// Result: http://domain.com/data-page/15/
インデックス部分なしで呼び出されたページを取得したい場合:
RewriteRule ^(.*)/$ $1.php
ユーザーが追加した拡張機能を削除するには:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME}\.html -f
2 つのことを行う必要があります。最初に、すべてのリンクを拡張子のない URL に変更する必要があります。次に、301 リダイレクトを作成して、拡張子付きの古い URL をまだ持っている可能性のあるブラウザとボットを新しい見栄えの良い URL にリダイレクトする必要があります。これは新しい場所のサーバー応答であり、書き換えではありません (サーバー上のみの内部 URI 書き換え)。
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(.*)\.(html?|php)
RewriteRule ^ /%2/ [L,R=301]
これにより、誰かhttp://www.website.com/page.html
がブラウザに入力するとリダイレクトされhttp://www.website.com/page/
、新しい URL がブラウザの URL アドレス バーに表示されます。
2 番目に行う必要があるのは、有効なリソースに内部的に戻す/page/
ことです。存在しないため、404 が返されます。
# need these so we don't clobber legit requests, just pass them through
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# now check the extensions
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
RewriteRule ^ /%1.html [L]
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.htm -f
RewriteRule ^ /%1.htm [L]
これらをドキュメント ルートの htaccess ファイルに入れるだけです。