9

現在、ファイルがルートに存在しない場合、特定の要求を要求されたドメインの個々のフォルダーにリダイレクトする htaccess ファイルに次のものがあります..

RewriteRule ^contact/?$ ASSETS/%{HTTP_HOST}/contact.php

RewriteCond %{REQUEST_URI} !^/ASSETS/%{HTTP_HOST}/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /ASSETS/%{HTTP_HOST}/$1
RewriteCond %{HTTP_HOST} ^(www.)?%{HTTP_HOST}$
RewriteRule ^(/)?$ ASSETS/%{HTTP_HOST}/index.php [L]

ドメイン フォルダーの名前が /ASSETS/www.domain1.com、/ASSETS/www.domain2.com などの場合、これは正常に機能します。

ただし、フォルダーに /ASSETS/domain1.com などのラベルが付けられることを前提として、既に多くのコードを作成しました (ドメイン名から www を除いたもの)。

ドメイン名を %{HTTP_HOST} から新しい変数に取得し、www. 一部(str_replaceなど)ですが、私が見つけたすべての答えは、すべてwww. またはいいえwww。ユーザーに強制されたwwwからサイトにアクセスしてもらいたいので、これは機能しません。バージョン。

以前は RewriteCond %{HTTP_HOST} ^(www.)?domain1.com$ を使用して各ドメインのルールを個別に実行していましたが、現在は非常に多くのドメインがあるため、それぞれに対して実行することは現実的ではありません。

あなたが助けてくれることを願っています! 前もって感謝します。

4

1 に答える 1

14

で必要なホスト パーツをキャプチャRewriteCond%1RewriteRule

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^$ ASSETS/%1/index.php [L]

ファイル システム レベル (htaccess なし) での代替ソリューションは、シンボリック リンクです。必要なホスト部分を抽出する代わりに、実際のディレクトリへのシンボリック リンクを作成します。

- ASSETS -+-domain1.com (directory)
          |
          +-www.domain1.com -> domain1.com (symbolic link)
          |
          +-domain2.com (directory)
          |
          +-www.domain2.com -> domain2.com (symbolic link)

さまざまな後方参照を説明するには、別の例を参照してください

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^foo/(.+)$ $1/%1/index.php [L]
  • ここには、 RewriteRuleパターン$1からキャプチャ グループを取得する があります。foo/(.+)
  • そして、前のRewriteCond%1からキャプチャ グループを取得する があります。は非キャプチャグループであることに 注意してください。これが、代わりにを使用する理由です。 (?:www\.)?(.+)
    (?:...)%1%2
于 2013-04-23T04:49:26.033 に答える