URLから.jsp
拡張子を削除して、スラッシュに置き換えます。 example.com/xyz.jsp
からexample.com/xyz/
およびexample.com/xyz.jsp?ab=12
からexample.com/xyz/?ab=12
。
私が使用した:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
そして
RewriteEngine On
RewriteBase /
# external redirect from /example.html to /example
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.html [NC]
RewriteRule ^ /%1/ [R=301,L]
# internal forward from /example/ to //example.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+?)/?$ /$1.html [L]
私の.htaccess
で、しかしどちらも正しく動作していません。
Mod_rewriteディレクティブと競合する傾向があるため、これが正しく機能する前にMultiViews
が無効になっていることを確認する必要があります。これを.htaccessファイルに追加します。
Options +FollowSymLinks -MultiViews
(FollowSymLinks
はmod_rewriteが機能するために有効にする必要があるため、念のため。)
次に、すでに持っているもののようなものが合理的に見えます:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.jsp -f
RewriteRule (.+)/$ $1.jsp [L]
URLの末尾にスラッシュを必須にしました(そうしないと、同じコンテンツにアクセスする2つのURLが存在する可能性があります-重複コンテンツ)。
PDATE:リクエストを.jsp
URLに正規URLにリダイレクトするには(つまり、拡張子なしで末尾にスラッシュを付けて)、次のようなもの(あなたが持っていたものに似ています)質問)上記のディレクティブの前に行く必要があります:
RewriteCond %{THE_REQUEST} \.jsp\s
RewriteRule (.+)\.jsp$ /$1/ [R=301,L]
これは、.jsp
URLがインデックス付けされているか、外部にリンクされている場合にのみ必要です。これが新しいサイトの場合、この手順はオプションです。
キャッチするよりも、RewriteRule
pattern(つまり(.+)\.jsp$
)でできるものと一致させる方が効率的です。 -ここにすべての正規表現。 THE_REQUEST
条件は、これが最初のリクエストにのみ適用され、書き換えられたリクエストには適用されないことを保証します。これにより、リダイレクトループが防止されます。
したがって、要約すると:
# Disable MultiViews
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Remove file extension from URLs (external redirect)
RewriteCond %{THE_REQUEST} \.jsp\s
RewriteRule (.+)\.jsp$ /$1/ [R=301,L]
# Internally rewrite extensionless URLs back to ".jsp"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.jsp -f
RewriteRule (.+)/$ $1.jsp [L]
DEBUGGING:上記のデバッグを支援するには、RewriteEngine On
ディレクティブの下に次のディレクティブを追加し、サーバーの環境変数(MOD_REWRITE_THE_REQUEST
およびMOD_REWRITE_URL_PATH
)を確認します-サイドコード:
RewriteCond %{THE_REQUEST} (.*)
RewriteRule (.*) - [E=MOD_REWRITE_THE_REQUEST:%1,E=MOD_REWRITE_URL_PATH:$1]
.jsp
URLにアクセスするとき、これらの環境変数には何が含まれますか?