1

次のようなサイト構造があります。

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 onethis 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

元の書き換えルールを保持する必要があります。複数の書き換えルールにより、ブラウザに「このウェブサイトは正しくリダイレ​​クトされていません」というメッセージが表示されるようです。このコードをコピーして貼り付け、必要に応じて詳細を修正しましたが、エラーが発生しました。

4

2 に答える 2

0

.htaccess でこれを試してください

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(.*)\.your_domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.your_domain.com/ [R=301,L]
RewriteCond %{REQUEST_URI} !"^/$"
RewriteRule (.+) http://%{HTTP_HOST}/ [R=301,L]

これはキャッチオールとして機能します。これを使用する前に、httpd.conf に設定されたリダイレクトがコメント化されていることを確認してください。

それがあなたを助けたかどうか私たちに知らせてください。:)

于 2013-08-08T11:48:16.977 に答える
0

VirtualHostセクションで、次のコードを行のwww.domain.co.ukすぐ下に挿入します。RewriteEngine On

RewriteCond %{REQUEST_URI} !^/(terms|request-information)(/.*|)$ [NC]
RewriteRule ^ / [L,R=301]

EDIT: 複数の書き換えルールがリダイレクトエラーを引き起こすようです.1つだけを使用してください.

于 2013-08-08T11:06:59.077 に答える