我正在研究我的.htaccess,显然我遇到了一些麻烦...... 我已经阅读了大量的文章和文档,我仍然无法弄清楚问题是什么:
我正在尝试将用户重定向到其他公用文件夹,如果用户正在访问子域
如果用户正在访问顶级域名,则应将其重定向到主公用文件夹
如果文件夹中不存在文件,则将用户重定向到index.php
这就是我提出的:
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com$ [NC]
RewriteCond __/%2/public/$1 -F
RewriteRule ^(.*)$ __/%2/public/$1 [QSA,L]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond public/$1 -F
RewriteRule ^(.*)$ public/$1 [QSA,L]
RewriteCond __/%2/public/$1 !-F
RewriteCond public/$1 !-F
RewriteRule ^(.*)$ index.php?request=/$1 [QSA,L]
可悲的是,它并没有真正起作用......好吧,除非我注释掉最后一个RewriteRule
。
有什么建议吗?我做错了什么?
答案 0 :(得分:1)
www.example.com
,这是主域而不是子域。-f
需要完整路径而非相对路径,因此请在路径前添加%{DOCUMENT_ROOT}/
。-f
代替-F
%2
您可以在站点根目录中使用以下代码.htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{HTTP_HOST} ^(?:www\.)?((?!www\.)[a-z0-9-]+)\.example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/__/%1/public/$1 -f
RewriteRule ^(.*)$ __/%1/public/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=/$1 [L,QSA]