きれいなURLにはmod_rewrite/.htaccessを使用します。
この条件/ルールを使用して、末尾のスラッシュを排除しています(または、301リダイレクトにより、非末尾スラッシュURLに書き換えます。これは、コンテンツの重複を避けるために行っています。末尾のスラッシュのないURLが好きなためです。より良い):
RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteCond%{HTTP_Host}!^ \。localhost $ [NC] RewriteRule ^(。+ )/ $ http://%{HTTP_Host}/$ 1 [R = 301、L]
これまでのところうまくいきます。唯一の欠点:
"multiple-trailing-slash" -URLsをnon-trailing-slash-URLsにも転送します。
例:http://example.tld/foo/bar//////
はhttp://example.tld/foo/bar
に転送します
_http://example.tld/foo/bar/
だけをhttp://example.tld/foo/bar
に転送したい。
それで、実際に1つだけ末尾のスラッシュである場合にのみ、末尾のスラッシュを削除することは可能ですか?
これがやや迷惑な、または奇妙な質問である場合はごめんなさい!
ありがとう。
次のルールは、スラッシュで終わるすべてのURLに一致し、スラッシュを末尾からすべて削除します。
RewriteRule ^(.*)/+$ $1 [R=301,L]
注:現在受け入れられている回答は、httpではなくhttpsでのみ機能しますが、これは両方で機能します。
書き換えルールを次のように変更します。
RewriteRule ^(.+[^/])/$ http://%{HTTP_Host}/$1 [R=301,L]
英語の場合:文字列の先頭、1つ以上の任意のものに一致します。スラッシュ、スラッシュ、終了には一致しません。
^(.+[^/])/$
つまり前置文字はスラッシュであってはなりません。
URLから末尾のスラッシュを削除するmod-aliasベースのソリューションは次のとおりです。
RedirectMatch ^/(.*?)/$ /$1
Htaccessまたはserver.configファイルで上記のリダイレクトを使用できます。
/ uri /を*/uri **にリダイレクトします。
GETリクエストから末尾のスラッシュのみを削除する場合は、以下を使用します。
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)/$ /$1 [L,R=301]