web-dev-qa-db-ja.com

index.htmlをルート+フォルダーにリダイレクトしますindex.htmlをルートフォルダーにリダイレクトしますか? (多言語)

Example.comページがあります。 index.htmlのないホームページが必要です(example.com/index.html-> example.com)

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]

動作しますが、/ de /(言語)フォルダーに対して作成するルールは何ですか?

上記のフォルダー/ de /のコードは、example.com(example.com/de/index.htmlまたはexample.com/de/index->​​ example.com)にリダイレクトします。 正しいリンク:example.com/de/

/ de /フォルダーのルールを作成する方法は?ルールを変更するには?

期待される効果

example.com/index.html example.com/index -> example.com
example.com/de/index.html example.com/de/index -> example.com/de/

.htaccess-example.com

RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
ErrorDocument 404 /
Options +Multiviews

.htaccess-example.com/de/

RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
ErrorDocument 404 /de/
Options +Multiviews
2
masemo5547

基本的には、/de/.htaccessファイルを完全に削除するだけです!* 1 ルート.htaccessはすでに必要なリダイレクトを実行しています。

* 1 または、別の言語固有の404ファイルが必要な場合は、すべてのディレクティブを削除し、ErrorDocumentディレクティブを保持します。ただし、ErrorDocumentディレクティブの形式については、以下の注を参照してください。)

RewriteRule ^index\.html$ / [R=301,L]ファイルの/de/.htaccessディレクティブは、リクエストをドキュメントルートにリダイレクトし直し、サブディレクトリを失っています。しかし、上記のように-これはとにかく必要ありません。

301はブラウザによって永続的にキャッシュされるため、ブラウザのキャッシュをクリアする必要があります。このため、302(一時)リダイレクトでテストすることをお勧めします。

example.com/de/index

また、indexを本当にリダイレクトする必要があるかどうかも質問します。 MultiViewsを有効にしているため、これにのみアクセスできます。個人的には、MultiViewsを無効にし(注意しないとmod_rewriteとの競合がさらに発生する可能性があります)、/indexのリクエストが404で失敗するようにします。

MultiViewsを有効にすると、すべてのHTMLファイルと静的リソースに拡張子なしでアクセスできます。

つまり、MultiViewsが無効になっていることを確認するには:

Options -MultiViews

MultiViewsdefaultによって無効になることに注意してください。 (一部の共有ホストは、何らかの理由でサーバー構成で明示的に有効にしていますが。)

RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]

必要に応じて、これらの2つのディレクティブを1つに減らすことができます。

RewriteRule ^(|.+/)index\.html$ /$1 [R=301,L]
ErrorDocument 404 /

ディレクトリインデックスのサブリクエストを発行するmod_dirに依存する代わりに、エラードキュメントへの完全なURLパスを指定する必要があります。例えば:

ErrorDocument 404 /index.html

概要

ルート/.htaccessファイル:

# Disable MutliViews
Options -Multiviews

ErrorDocument 404 /index.html

RewriteEngine on

# Remove www subdomain and redirect to HTTPS
RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

# Remove "index.html" from all URLs
RewriteRule ^(|.+/)index\.html$ /$1 [R=301,L]
2
MrWhite