次のファイル/フォルダー構造の静的サイトがあります。
- index.html
- / foobar /
- index.html
- bob.html
- alice.html
私は次のことを達成したいと思います:
.html
すべての拡張機能を削除します。✔動作します- 削除し
index.html
ます(またはindex
)。✔動作します - 末尾にスラッシュを付けずにファイルを終了したい。✔動作します
- 誰かが末尾のスラッシュを追加した場合は、末尾のスラッシュなしでURLにリダイレクトします。✘動作しません
- 「フォルダ」(実際
index.html
にはフォルダ内のファイル)をスラッシュなしで終了させたい。✘動作しません- 誰かが末尾のスラッシュを追加した場合は、末尾のスラッシュなしでURLにリダイレクトします。✘動作しません
したがって、次のURLが機能するはずです。
example.com/
(実際には/index.html
:)example.com/foobar
(実際には/foobar/index.html
:)example.com/foobar/bob
(実際には/foobar/bob.html
:)example.com/foobar/alice
(実際には/foobar/alice.html
:)
次のリクエストはリダイレクトする必要があります(301):
example.com/foobar/
にリダイレクトしますexample.com/foobar
:)example.com/foobar/bob/
にリダイレクトしますexample.com/foobar/bob
:)example.com/foobar/alice/
にリダイレクトしますexample.com/foobar/alice
:)
ファイル/foobar.html
が存在する場合、これにより問題が発生することがわかります。誰かがアクセスしたとき/foobar
に、ディレクトリまたはファイルのどちらが要求されているかが明確ではありません。しかし、私はこれが決して起こらないようにします。
現時点では、私はこれを持っています.htaccess
:
# Turn MultiViews off. (MultiViews on causes /abc to go to /abc.ext.)
Options +FollowSymLinks -MultiViews
# It stops DirectorySlash from being processed if mod_rewrite isn't.
<IfModule mod_rewrite.c>
# Disable mod_dir adding missing trailing slashes to directory requests.
DirectorySlash Off
RewriteEngine On
# If it's a request to index(.html)
RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC]
# Remove it.
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L]
# Add missing trailing slashes to directories if a matching .html does not exist.
# If it's a request to a directory.
RewriteCond %{SCRIPT_FILENAME}/ -d
# And a HTML file does not (!) exist.
RewriteCond %{SCRIPT_FILENAME}.html !-f
# And there is not trailing slash redirect to add it.
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]
# Remove HTML extensions.
# If it's a request from a browser, not an internal request by Apache/mod_rewrite.
RewriteCond %{ENV:REDIRECT_STATUS} ^$
# And the request has a HTML extension. Redirect to remove it.
RewriteRule ^(.+)\.html$ /$1 [R=301,L]
# If the request exists with a .html extension.
RewriteCond %{SCRIPT_FILENAME}.html -f
# And there is no trailing slash, rewrite to add the .html extension.
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]
</IfModule>
何を変更/削除/追加する必要があり.htaccess
ますか?よくわかりません。「一致する.htmlが存在しない場合は、欠落している末尾のスラッシュをディレクトリに追加する」とコメントされたブロックを削除しようとしましたが、これは役に立ちませんでした。