web-dev-qa-db-ja.com

.htaccessファイルにURL書き換えを実装するにはどうすればよいですか?

ユーザーが次のようなアドレスを表示する代わりに、URLの書き換えを行いたい(なぜ? この質問 を参照)

labouseur.com/course-compilers.html 

代わりに、単純に表示して使用できます

labouseur.com/course-compilers

(さらに良いことに、コース/コンパイラになるように再構築する必要があります。)

私は自分のウェブサイトにLinuxベースの共有ホスティングサービスを使用しているため、サーバーの管理制御はできませんが、.htaccessを制御できます。私がオンラインで読んだ参考文献は私にはあまりはっきりしていないようでしたので、ここで少し明快さとアドバイスを探しています。

17
Alan

実際にサーバー上のファイルから.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
13
Rizwan Kassim

最初に、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を使用してそれらの発生を停止してください。

3
Aiden Bell

上記の回答に加えて、使用することができます

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+)文字、ハイフン(-)付きの数字を使用できます。

(.*)は関係なくすべてのリクエストを書き換えます。これにより、アクセス時に内部サーバーエラーを引き起こす他のルールに従うことができなくなる可能性があります。

2
Abhishek Gurjar

これを実現するために.htaccessファイルを使用する必要はありません。ファイルをディレクトリに構造化し、「labouseur.com/course-compilers.html」を使用する代わりに、ファイルにindex.htmlという名前を付け、「course-compilers」というディレクトリに配置します。その後、そのディレクトリをポイントすると、インデックスはデフォルトで提供されますが、URLには表示されません。したがって、リンクを「labourseur.com/course-compilers」と書くだけで十分です。

.htaccessは不要です。

1
Joel Glovier