すべての URL を一様にきれいにしたい。つまり、私のすべての URL には拡張子も末尾のスラッシュもありません。また、誰かが.php
スラッシュまたは末尾のスラッシュを入力すると、その人は単純にクリーンな URL にリダイレクトされます。
例:
example.com/blog/file.php
と
example.com/blog/file/
両方にリダイレクトします
example.com/blog/file
すべての URL を一様にきれいにしたい。つまり、私のすべての URL には拡張子も末尾のスラッシュもありません。また、誰かが.php
スラッシュまたは末尾のスラッシュを入力すると、その人は単純にクリーンな URL にリダイレクトされます。
例:
example.com/blog/file.php
と
example.com/blog/file/
両方にリダイレクトします
example.com/blog/file
これ.htaccess
を試してください:
RewriteEngine on
#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php /$1 [R=301,L]
私の Web ホストは最近 (2011 年 9 月)、Apache サーバーを新しいバージョンの Apache に更新したため、.htaccess
拡張子のない URL を表示する古いコードが機能しなくなりました。かなりの量のコード (おそらく古いバージョンの Apache OS で動作していた) をコピーし、テストに失敗した後、次のコードが私のサーバーで動作するようであると判断できました。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php http://www.example.com/$1 [R=301,L]
それを試してみてください --Multiviews
それを機能させるための重要な要素のようです。