我最近对我网站的文件夹结构做了一些小改动,现在我的一个重写文件似乎已经破了。
过去我在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行。
任何人都可以发现错误,或者告诉我如何系统地检查此设置是否存在错误?
答案 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]
不可否认,我不确定你为什么现在遇到问题,但不是之前。我在测试服务器上运行了原始规则集,由于内部重定向过多导致内部服务器错误,因此我们的设置必须存在差异。无论如何,希望这会让事情适合你。