htaccess RewriteRule 得到错误 500 和 $1 用于重新映射子域

htaccess RewriteRule gets error 500 with $1 for remapping subdomain

我有一个共享主机,它指向主域 - mydomain.com 和一个子域 - beta.mydomain.com - 指向同一个文件夹 public_html.

此主机的结构是:

/
a
b
public_html
 -a
 -b
 -.htaccess

public_html里面的文件夹ab分别指向根目录下的文件夹

.htaccess文件中,有这些规则:

RewriteEngine on

#Subdomain rule#
RewriteCond %{HTTP_HOST} ^beta.mydomain.com$
RewriteRule ^(.*)$ /b/otherfolder/ [NC,L]

#Main domain rule#
RewriteCond %{REQUEST_URI} !^/a
RewriteRule ^(.*)$ /a/otherfolder/ [NC,L]

实际上,当我访问主域时,主域规则 匹配并显示正确的页面。

当我访问子域时,子域规则匹配并且returns错误500;但是,删除 /b/otherfolder/ 上的 </code>,它会显示该文件夹中的索引文件(当然,页面无法加载正确的 js 或 css 文件)。</p> <p>问题:</p> <ol> <li><p>如何避免错误 500 并让 <code>Subdomain rule 与另一个一样好?

  • 如何为 server/htaccess 启用错误日志? 我阅读了有关 ErrorLog 指令的信息,但是我的搜索仅涉及 PHP.

  • 由于无限循环,您得到 500。这是因为子域重写是无条件的,因为它不断重写 /b/otherfolder/.

    您可以有以下规则:

    RewriteEngine on
    
    #Subdomain rule#
    RewriteCond %{HTTP_HOST} ^beta\.mydomain\.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/b/ [NC]
    RewriteRule ^(.*)$ b/otherfolder/ [NC,L]
    
    #Main domain rule#
    RewriteCond %{REQUEST_URI} !^/(a|b)/ [NC]
    RewriteRule ^(.*)$ a/otherfolder/ [NC,L]
    

    注意添加条件 RewriteCond %{REQUEST_URI} !^/b/ [NC],当 URI 以 /b/ 开头时停止重写。