我有这个工作:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.co\.uk
RewriteRule ^(.*) http://domain.co.uk/%1 [L]
因此它会将test.domain.co.uk重定向到test.domain.co.uk/test
但是,我希望它能够更改文档根目录而不是用户看到重定向。我在这里读了几篇文章并尝试了一些方法。但我不知道如何调试任何错误,它只是不起作用。我试过的另一个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/-
RewriteCond %{HTTP_HOST} ^([^\./]+)
RewriteCond %{DOCUMENT_ROOT}/-%1 -d
RewriteRule ^(.*)$ -%1/$1 [L]
但这似乎根本不起作用。
任何帮助都将不胜感激。
伊恩
答案 0 :(得分: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]
这个方法为你做两件事,如果它是404,它不会尝试在内部重写,所以如果你去:http://sub.domain.co.uk/this/path/does/not/exist/blah
,你将不会得到一条404消息:{{1不存在,只是/sub/this/path/does/not/exist/blah
因为URI没有被重写,因此没有暴露你的底层目录结构。
第二件事是您可能已启用/this/path/does/not/exist/blah
。这意味着如果您访问类似:DirectorySlash
的目录,缺少尾部斜杠,mod_dir将需要重定向并添加斜杠,但它可能会错误,因为URI已被重写并将您重定向到: http://sub.domain.co.uk/this/path
。我们先使用隐藏http://sub.domain.co.uk/sub/this/path/
的正确URI添加尾部斜杠。