0

私はこれを機能させました:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.co\.uk
RewriteRule ^(.*) http://domain.co.uk/%1 [L]

したがって、test.domain.co.uk を test.domain.co.uk/test にリダイレクトします。

ただし、ユーザーがリダイレクトを見るのではなく、ドキュメントルートを変更するようにしたいと思います。ここでいくつかの記事を読み、いくつかのことを試しました。しかし、エラーをデバッグする方法がわかりません。うまくいきません。私が試したもう1つは:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/-
RewriteCond %{HTTP_HOST} ^([^\./]+)
RewriteCond %{DOCUMENT_ROOT}/-%1 -d
RewriteRule ^(.*)$ -%1/$1 [L] 

しかし、これはまったく機能していないようです。

どんな助けでも大歓迎です。

イアン

4

1 に答える 1

1

ドキュメントルートで次のようなものを試してください。

RewriteEngine On

# check if subdomain folder has the existing file, if so, serve it
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.co\.uk
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f
RewriteRule ^(.*)$ /%1/$1 [L] 

# check if subdomain folder has the existing directory WITH A TRAILING SLASH, if so serve it
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.co\.uk
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*?)/$ /%1/$1/ [L] 

# check if subdomain filder has the existing directory but missing trailing slash, redirect with it
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.co\.uk
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /$1/ [R=301,L] 

このメソッドは2つのことを行います。404の場合、内部で書き換えを試みないため、次の場所に移動するhttp://sub.domain.co.uk/this/path/does/not/exist/blahと、次のような404メッセージは表示されません。URIがなかったという理由/sub/this/path/does/not/exist/blahだけで、存在しません。 /this/path/does/not/exist/blaht書き直されたため、基になるディレクトリ構造が公開されません。

2つ目は、おそらくDirectorySlashオンになっていることです。つまり、次のようなディレクトリにアクセスした場合http://sub.domain.co.uk/this/path、末尾のスラッシュがない場合、mod_dirはそのスラッシュをリダイレクトして追加しますが、URIが書き換えられ、次の場所にリダイレクトされるため、おそらく間違っていますhttp://sub.domain.co.uk/sub/this/path/。を非表示にする正しいURIを使用して、末尾のスラッシュを先制的に追加しますsub

于 2012-08-06T16:36:13.177 に答える