ユーザーが次のようなアドレスを表示する代わりに、URLの書き換えを行いたい(なぜ? この質問 を参照)
labouseur.com/course-compilers.html
代わりに、単純に表示して使用できます
labouseur.com/course-compilers
(さらに良いことに、コース/コンパイラになるように再構築する必要があります。)
私は自分のウェブサイトにLinuxベースの共有ホスティングサービスを使用しているため、サーバーの管理制御はできませんが、.htaccessを制御できます。私がオンラインで読んだ参考文献は私にはあまりはっきりしていないようでしたので、ここで少し明快さとアドバイスを探しています。
実際にサーバー上のファイルから.htmlを削除し、htaccessで設定して、htmlファイルとして提供されるようにすることもできますが、それはおそらくあなたが探しているものではありません。
これを行う :
RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html
最初に、Apacheにモジュールがあり、それが.htaccesファイルで許可されていることを確認してから、以下を追加します。
RewriteEngine on
# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1
あなたの例では
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html
単一レベルのディレクトリ構造と
RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html
マルチレベル構造の場合。
しかし注意してください
構造がある場合
/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess
子.htaccess
ファイルの書き換えルールは親フォルダーに関連するため、いくつかのmessy書き換えループの状況に陥ることがあります。可能であれば、RewriteCond
を使用してそれらの発生を停止してください。
上記の回答に加えて、使用することができます
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]
([\w-]+)
文字、ハイフン(-)付きの数字を使用できます。
(.*)
は関係なくすべてのリクエストを書き換えます。これにより、アクセス時に内部サーバーエラーを引き起こす他のルールに従うことができなくなる可能性があります。
これを実現するために.htaccessファイルを使用する必要はありません。ファイルをディレクトリに構造化し、「labouseur.com/course-compilers.html」を使用する代わりに、ファイルにindex.htmlという名前を付け、「course-compilers」というディレクトリに配置します。その後、そのディレクトリをポイントすると、インデックスはデフォルトで提供されますが、URLには表示されません。したがって、リンクを「labourseur.com/course-compilers」と書くだけで十分です。
.htaccessは不要です。