.htaccess子域到文件夹

时间:2010-08-24 13:47:10

标签: .htaccess mod-rewrite

我最近对我网站的文件夹结构做了一些小改动,现在我的一个重写文件似乎已经破了。

过去我在public_html中有一个/mydomain.com/文件夹,其中设置了一个wiki。在同一个文件夹中有一些我用于子域访问的文件夹,比如成员和文件。

旧设置:

#www to main website
RewriteCond %{HTTP_HOST} ^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L]

相当简单,当我输入files.mydomain.com/myfile.zip时,它没有任何问题。

最近我安装了我的wiki的几种语言(实际上与问题无关,只是为了详细说明情况),我制定了以下规则:

#to the right language folder (www = en)
RewriteCond %{HTTP_HOST} ^(www|nl|es).mydomain.com$
RewriteRule ^(.*)$ mydomain.com/%1/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ mydomain.com/misc/%1/$1 [L]

显然,不同的语言wiki是在mydomain.com/www/,mydomain.com/es/等设置的。这样做非常好。 问题在于第二部分,子文件夹。在同一个mydomain.com/文件夹中,我创建了一个misc /文件夹来存储所有misc内容(包括子域文件夹)。我想只是在路径中添加/ misc /(就像我在第一个规则中添加了语言文件夹名称)会使它工作..但它给了我500错误。 旧设置和新设置都没有任何可能与第二条规则冲突的文件夹中的.htaccess行。

任何人都可以发现错误,或者告诉我如何系统地检查此设置是否存在错误?

1 个答案:

答案 0 :(得分:2)

我认为最简单的防止重定向循环的方法就是检查你是否已经将URL改写为你打算去的地方。我们可以用几种不同的方式做到这一点;如果您在重写文件后知道文件将存在,则可以在%{REQUEST_FILENAME} !-f上进行调整。

在您的情况下,由于您正在将所有内容重写到/public_html目录中的公共文件夹,我们可以检查是否已经完成:

#to the right language folder (www = en)
RewriteCond %{HTTP_HOST} ^(www|nl|es)\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/%1/$1 [L]

#subdomain to folder (members. => /members/, files. => /files/, etc)
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/misc/%1/$1 [L]

不可否认,我不确定你为什么现在遇到问题,但不是之前。我在测试服务器上运行了原始规则集,由于内部重定向过多导致内部服务器错误,因此我们的设置必须存在差异。无论如何,希望这会让事情适合你。