2

私は以下のコードを知っています

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

URLがwwwなしでアクセスされるたびに、HTTPホストにwwwを追加するために使用されます。

同様にコード

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

url 変数の値で index.php に url 内のすべてのものを投稿するために使用されます。最初の例のように URL を変更せずに (URL を www なしから www 付きに変更します)。

私が欲しいのは少しトリッキーです。

www がない場合は、最初の例の手順を実行する必要があります。

また、たとえば、forum.site.com、blog.site.com、または www.site.com に www またはその他のテキストがある場合、2 番目の例のように、同じ名前のフォルダーに通知なしで送信する必要があります。

eE.g. www の場合はwww/、変数が続くフォルダーに書き換える必要があります。

index.php?pid=1訪問者タイプ www.site.com のように www/ フォルダーからファイルをロードする必要があります。訪問者タイプが www.site.com/index.php?pid=1 の場合、データとともに www/ フォルダーに書き換える必要があります。

www以外のものについても同じことが言えます。fourm.site.com/index.php?blah=blahBlah などのように。

私が混乱したり、ルールを破ったりしていないことを願っています。

4

1 に答える 1

0
RewriteEngine On
RewriteCond %{HTTP_HOST} !^.+{3,}
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.*)\.(.+\..+)
RewriteRule ^(.*)$ http://%2/%1/$1 [QSA,L]

2 番目のルールのアルゴリズムは次のとおりです。

  1. ホストがドットで区切られた少なくとも 3 つの部分で構成されていることを確認します。.co.uk と .com.br のような 3 つの部分を自然に持つドメインがあるため、これは理想的なソリューションではありません。しかし、あなたは 2 つの部分からなるドメインを使用していると思います。
  2. したがって、www.site.com のように 3 つの部分がある場合、1 番目の部分を %1 に、2 番目の部分を %2 に入れます。つまり、%1 = 'www'、%2 = 'site.com' です。
  3. すべてをリダイレクトするhttp:://site.com/www/request

site.co.uk のように 3 つの部分からなるドメインがある場合は、より複雑なルールを作成できます。

RewriteCond %{HTTP_HOST} ^(.*)\.(.+\..+\..+)
RewriteRule ^(.*)$ http://%2/%1/$1 [QSA,L]

subdomain.site.co.ukこれは次のように書き換えます。http://site.co.uk/subdomain/

于 2013-07-31T21:43:11.413 に答える