代码之家  ›  专栏  ›  技术社区  ›  Stephan Muller

.htaccess子域到文件夹

  •  1
  • Stephan Muller  · 技术社区  · 14 年前

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

    在过去,我有一个/mydomain.com/文件夹在公共HTML中,其中设置了一个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]
    

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

    是否有人能发现错误,或者告诉我如何系统地检查此设置中的错误?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Tim Stone    14 年前

    防止重定向循环发生的最简单方法是检查是否已经将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]
    

    诚然,我不知道你为什么现在遇到问题,但以前没有。我在我的测试服务器上运行了您的原始规则集,结果由于内部重定向太多而导致内部服务器错误,因此我们的设置一定存在差异。无论如何,希望这能让你的工作顺利进行。