0

2 つの別々のサイトを指すスプラッシュ ページを持つプロジェクトがあります。サイトは同じサーバーでホストされており、メンテナンスを容易にするために別のフォルダーに配置する必要があります。

フォルダ構造は次のようになります。

/home/user1234/public_html

    /splash/
        index.html
        css/
        images/
        ...

    /site1/
        index.php
        css/
        images/
        ...

    /site2/
        index.php
        css/
        images/
        ...

メイン サイト (site1 と site2、おそらく 2 つの Wordpress インストール) は、サブドメインではなく、url 構造のようなサブディレクトリの下でアクセスできる必要があります。したがって、URL 構造は次のようになります。

www.MySite.tld --> Splash
www.MySite.tld/site1 --> Site1
www.MySite.tld/site2 --> Site2

ここで、これらの URL をサーバー上の対応するディレクトリに一致させる必要があります。しかし、これを行う方法が正確にはわかりません。これは共有ホスティング サーバーなので、htaccess と mod_rewrite しか使用できません。

そのため、Web ホストの管理インターフェイスで、www.MySite.tld を /splash フォルダーに指定しました。次に、そのフォルダーに .htaccess を配置し、"仮想フォルダー" /site1 および /site2 への要求を次のように書き換えます。

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/(site1|site2)/?$ [NC]

RewriteRule ^(.*)$ /home/user1234/public_html/%1 [L]

私の知る限り、mod_rewrite だけでは現在の DOCUMENT_ROOT (/splash) 以外のファイルに書き換えることはできないため、これは機能しません。そこで、www.MySite.tld の 1 レベルを /splash ではなく /public_html に指定しようとしました。/site1 と /site2 へのリクエストは確実に機能しますが、/ へのリクエストはデフォルトで 404 を返します。これは、上記のフォルダー構造でわかるように、そこにインデックス ファイルがないためです。そこで、次のルールで .htaccess を /public_html の 1 レベル上に配置しました。

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/?$ [NC]

RewriteRule ^(.*)$ /splash [L]

これでスプラッシュ ページにアクセスできるようになりましたが、URL の最後に「/splash」が追加されてしまいます。

私は何時間も解決策を探していて、これまでに見つけた提案の多くを試しましたが、どれも私の問題を解決しませんでした. 私が最後に試みたのは、 mod_rewrite でいくつかの仮想ホストをセットアップすることでしたが、それも機能させることができませんでした。おそらく、mod_rewrite やその他すべての apache について、まだ十分に確認できていません。;-)

または、正しい RewriteBase を設定するなどの基本的なものが欠けているのかもしれません...この URL + フォルダー構造は、mod_rewrite のみで実現できますか? はいの場合、どのような書き換えルールを設定する必要がありますか? そうでない場合、使用できる代替手段はありますか? どんな助けでも大歓迎です。

4

1 に答える 1

1

mod_rewrite を使用すると、これを非常に簡単に実現できます。概説した URL 構造を考慮して、次の .htaccess を使用します。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(site1|site2|splash)/ [NC]
RewriteRule ^(.*) splash/$1 [L,PT]

は、site1 または site2 が要求されたときのRewriteCond書き換えを回避し、要求に対する無限ループも防ぎます/splash(これは .htaccess 実装では特に重要です)。

が一致する場合RewriteCond(つまり、要求が 3 つのパスのいずれにも該当しない場合)RewriteRuleは、すべての URL に対して照合^(.*)され、 として書き換えられsplash/$1ます。オプションL,PTは、これがL|lastルールである必要があり (VirtualHost コンテキストでは便利ですが、.htaccess では常に機能するとは限りません)、要求はPT|passthroughリダイレクト (30x) ヘッダーを送信せずにバックエンド (この場合は Apache) に送信する必要があることを定義します。クライアント ブラウザ。

于 2013-05-22T20:05:22.830 に答える