web-dev-qa-db-ja.com

Apache 2.2 rewrite-すべてのリクエストをindex.htmlに強制します

Index.htmlに対する要求に関係なく、すべての要求を強制する必要があります。残念ながら、私が試したすべてが適切に機能していません。

次のように動作するはずですが、動作しません。私の理解では、/ index.htmlで終わらないものについては、実際にindex.htmlファイルをリクエストするように言っています。

リダイレクト302!^/index.html http://www.example.com/index.html

どんな助け/説明もいただければ幸いです。

5
Jim Ekleberry

ルートフォルダーで.htaccessを使用すると、次のようになります。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteRule . /index.html [R=302,L]

条件とルールは、リクエストがindex.htmlと一致しない場合、何にでもリダイレクトすることです。

13
Prix

@prixの回答がいいです。私自身も、通常のリソース(画像とCSS)が通常どおりに提供されるように条件を追加する必要がありました。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt|svg|woff|ttf|eot)$
RewriteRule . index.html [L]
8
Nadir

他の回答には賛成票を投じましたが、index.htmlファイルにロゴを含めたので、結局それらは私を助けませんでした。これが私の調整です。まず、前提条件です。

変化する

AllowOverride None

AllowOverride All

/etc/Apache2/Apache2.conf
…
<Directory /var/www/>

/var/www/htmlで.htaccessファイルを有効にします(例)。


ファイルを作成または編集する

/var/www/html/.htaccess

コンテンツ付き

RewriteEngine On

RewriteCond %{REQUEST_URI} ^.+/logo\.png$
RewriteRule . /logo.png [L]

RewriteCond %{REQUEST_URI} !^/index\.html$
RewriteCond %{REQUEST_URI} !^/logo\.png$
RewriteRule . /index.html [L]

ご覧のとおり、私はリダイレクトを使用していません。つまり、ユーザーが入力したパスまたはURIは同じままです。それでも、index.htmlページにはロゴが表示されます。

1
uav