ややこしい条件ですが、タイトルのことをしたくなったので書きました。
条件は以下。
- あるサイトのサブディレクトリ (
https://example.com/hoge/
) の配下 - トップページ以外はトップページにリダイレクト。ただし以下条件を除く。
- 特定ディレクトリ配下 (
https://example.com/hoge/fuga/
) - エラーページ (ここでは全て
errorXXX.html
のようなURLになっているものとします) - 各種リソースファイル (拡張子が
css
,js
,jpg
,gif
,png
,svg
,ico
,xml
,otf
,ttf
,woff
,woff2
)
- 特定ディレクトリ配下 (
- 302 リダイレクトさせる
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (MSIE|Trident) [NC]
RewriteCond %{REQUEST_URI} !(^/hoge/error-ie.html$)
RewriteRule ^(.*)$ /hoge/error-ie.html [R,L]
RewriteCond %{REQUEST_URI} !(^/hoge/(index\.html)?$)
RewriteCond %{REQUEST_URI} !(^/hoge/fuga/)
RewriteCond %{REQUEST_URI} !(^/hoge/error(.*)\.html)
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png|svg|ico|xml|otf|ttf|woff|woff2)$
RewriteRule ^(.*)$ http://example.com/hoge/ [R=302,L]
ErrorDocument 404 /hoge/error404.html
ErrorDocument 500 /hoge/error500.html
こんな感じで対処。
しかし .htaccessでサブディレクトリ内のURLをリダイレクト とか `.htaccess` で全アクセスをリダイレクトする とか、わりとこの手のを頻繁にやっている気がしますね……おおよそパターンも掴めているので、ジェネレータとか作った方が良いのかもしれない。