次のようなサイト構造があります。
www.domain.com
www.domain.com/subpage-a
www.domain.com/subpage-b
www.domain.com/terms
www.domain.com/request-information
すべてのサブページをホームページ、特定のページを指すようにする Apache 書き換えルールを構成しようとしています。
上記の例を使用すると、サイトのすべてのサブページをホームページにリダイレクトする必要がterms
ありrequest-information
ます。
私は StackOverflow を調べてきましたが、this oneやthis oneなど、未回答の質問がいくつか見つかりました。2番目のリンクは、私が望むことをしているようですが、特定のページのルールを上書きする方法がわかりません.
私の構成
現在、私の Apache ファイルは次のようになっています。
<VirtualHost *:80>
ServerName www.domain.co.uk
ProxyPreserveHost On
RewriteEngine On
RewriteRule ^/(.*)$ http://server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P]
</VirtualHost>
<VirtualHost *:80>
ServerName domain.co.uk
Redirect permanent / http://www.domain.co.uk/
</VirtualHost>
これを機能させるために、サブページをリダイレクトできるかどうかを確認するために、これを追加しました。
<VirtualHost *:80>
ServerName http://www.domain.co.uk/subpage-a
Redirect permanent / http://www.domain.co.uk/
</VirtualHost>
これはうまくいきませんでしたが、このサイトには多くのサブページがあるため、特定のサブページを無視するキャッチオール ルールがもっと欲しいです。
これは可能ですか?誰かアイデアはありますか?
ありがとう。
TL;DR
すべてのサブページをリダイレクトし、特定のページをドメインのホームページにリダイレクトする「キャッチオール」スタイルの Apache 書き換えルールを探しています。
編集:
以下の回答に関して、私は次のことを試しました:
答え #1
コードを次のように変更しました。
<VirtualHost *:80>
ServerName sub.domain.co.uk
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(terms|request-information)(/.*|)$ [NC]
RewriteRule ^/(.*)$ http://server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P]
</VirtualHost>
<VirtualHost *:80>
ServerName domain.co.uk
Redirect permanent / http://www.domain.co.uk/
</VirtualHost>
ただし、ダッシュを含むページは 404 のようです。これで問題ありませんが、残念ながら、上記の代わりにリダイレクトしたいすべてのページをリストする必要がありますterms|request-information
。
答え 2
元の書き換えルールを保持する必要があります。複数の書き換えルールにより、ブラウザに「このウェブサイトは正しくリダイレクトされていません」というメッセージが表示されるようです。このコードをコピーして貼り付け、必要に応じて詳細を修正しましたが、エラーが発生しました。