htaccess重定向到公共目录(如果不是子域)

时间:2019-07-20 08:11:02

标签: .htaccess phalcon

我正在使用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文件夹。

1 个答案:

答案 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>