web-dev-qa-db-ja.com

URLから.htmlとindex.htmlを削除する

しようとしていくつかの問題があります

  1. URLから.html拡張子を削除します
  2. URLから「index.html」を削除する

1)拡張機能を削除するには、htaccessファイルでこれを使用してみました。

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

ただし、<a href="abcde.html"></a>などのHTMLのリンクをクリックしても、URLから.htmlが削除されず、www.website.com/abcde.htmlのままになります

2)これを使用してindex.htmlを削除しようとしました

RewriteCond %{THE_REQUEST} \/index\.(php|html)\ HTTP [NC]
RewriteRule (.*)index\.(php|html)$ /$1 [R=301,L]

しかし、サーバーにindex.htmlファイルをロードすると、URLは次のようになります

www.website.com/folder//

最後に余分な/が残っています。

誰も私を助けることができますか?

3
James Turner

Anagioが提供した答えに基づいて、すべての要件をカバーしましょう。

  • /path/to/fileが存在する場合、/path/to/file.htmlなどのリクエストで.htmlファイルを透過的に提供する
  • /path/to/file.htmlに対する直接リクエストを拒否する
  • /index.htmlに対するリクエストで/を提供する

ディレクトリ構成:

Options +FollowSymLinks -MultiViews

DirectoryIndex index.html

RewriteEngine On
#
# Rewrite valid requests on .html files
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html?rw=1 [L,QSA]
#
# Return 404 on direct requests against .html files
RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{QUERY_STRING} !rw=1 [NC]
RewriteRule ^ - [R=404]
2
danlefree

これはstackoverflowからのものです

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
0
Anagio