2

CMS が重複を作成する状況に陥っています。すべてのページは、最後にスラッシュを付けても付けなくても開くことができます。

そのため、検索エンジン用にすべての URL を物理的に書き換える必要があり、301 リダイレクトを使用している人は、末尾にスラッシュがない場合に条件を変更します。

しかし問題は、スクリプトが URL の末尾のスラッシュでのみ機能するため、スクリプトが機能しなくなることです。

私は論理的にこの .htaccess を作成しました

RewriteCond %{REQUEST_URI} ^(.*)/$ [NC]
RewriteRule ^(.*)(/) $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L]

しかし、リダイレクトループが発生しています。正しい書き方を教えてください。ユーザーと SE の主な目的は、エンドスラッシュ URL を表示しないが、スクリプトがサーバー上で内部的にエンドスラッシュで URL を書き換える必要があることです。

4

1 に答える 1

1

しかし、リダイレクトループが発生しています。正しい書き方を教えてください。ユーザーと SE の主な目的は、エンドスラッシュ URL を表示しないが、スクリプトがサーバー上で内部的にエンドスラッシュで URL を書き換える必要があることです。

リダイレクトする場合は、実際のリクエストと照合する必要があります。そうしないと、URI が書き換えられ、最初のルールがそれに対して照合されてリダイレクトされるためです (何度も何度も)。

だから、このようなもの:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]*?)/($|\ )
RewriteRule ^(.*)(/) $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L]

(最初の条件のみ変更)

于 2012-09-28T10:01:46.657 に答える