【问题标题】:How to write a htaccess file to wildcard folder to subdomain如何将 htaccess 文件写入通配符文件夹到子域
【发布时间】:2012-11-02 14:32:18
【问题描述】:

我正在尝试将我的所有文件夹(使用通配符)重定向到它们的子域。例如:

www.mywebsite.com/folder1 到 folder1.mywebsite.com/
www.mywebsite.com/folder2 到 folder2.mywebsite.com/
www.mywebsite.com/folder3 到 folder3.mywebsite.com/

现在无需为每个人编写规则,有没有办法将它们全部重定向到各自的子域?

我试过了:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteRule ^(.*)$ /%1/$1 [QSA]

但它给了我一个内部错误 500

【问题讨论】:

  • stackoverflow.com/questions/6725973/… 这是您要找的东西吗?
  • 是的,但是这个例子对我来说并不适用。我试过 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$ RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$ RewriteRule ^(.*)$ /%1/$1 [QSA ] 但它给了我一个内部错误 500

标签: .htaccess redirect subdomain directory wildcard


【解决方案1】:

您需要防止规则循环,使用条件首先检查/%1/$1 是否确实存在, URI 尚未以%1 开头

所以:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /%1/$1 [QSA]

或者:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

!^/([^/]+)/([^:]*):\1 表达式将 URI 中的第一个文件夹分组,并使用 \1 反向引用它。如果它们相等,则 URI 中的第一个文件夹是 %1,它反向引用到上一个匹配项 (\w+)

【讨论】:

  • 好点。我相信如果文件存储在正确的位置,我发布的关于解决方案将起作用,但很可能并非如此。这种解决方案更加优雅和彻底。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2012-11-20
  • 1970-01-01
  • 2011-08-05
  • 2021-11-14
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多