我正在使用phalconPHP。在根目录的.htaccess文件中,我要检查两件事。
首先,如果URL开头没有www,则应将其重定向到www URL。
第二秒,如果URL中没有子域,则应将请求转移到/ public目录。
问题在于第一个条件可以正常工作,但是第二个条件只是提供了大量重定向,从而导致错误。
# Check if there is www if there is no subdomain
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
</IfModule>
# redirect to /public directory if the requested URL does not
contain subdomain
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
如果我从.htaccess中删除了第二个条件,则该子域可以工作,但是我的phalcon项目无法工作,因为该URL未重定向到/ public文件夹。
答案 0 :(得分:0)
在.htaccess文件顶部检查此规则
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
或没有非www到www重定向的子域
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>