在共享服务器上部署时的Yii2 Basic App HtAccess规则

时间:2017-08-31 16:26:19

标签: php yii2 yii2-basic-app

我已经使用yii2基本应用程序建立了一个站点,一切都在我的localhost上工作正常,我刚刚通过克隆来自/public_html文件夹更新的作曲家的根目录上的git的repo来部署我的应用程序并运行迁移,在我添加

后,一切都很顺利

public_html/.htaccess

public_html/web/.htaccess

具有以下规则集的文件

的public_html / htaccess的

<IfModule mod_rewrite.c>
    Options +SymLinksIfOwnerMatch
    RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/.*
    RewriteRule ^(.*)$ web/$1 [L]

    RewriteCond %{REQUEST_URI} !^/web/
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ web/index.php
</IfModule> 

的public_html /网络/ htaccess的

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

config/web.php

中的UrlManager
'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'baseUrl' => sprintf(
            "%s://%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME']
    ),
    'rules' => [
        '' => 'site/index',
        'tos' => 'site/tos',
        'privacy-policy' => 'site/privacy',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
    ],
],

无论我做什么,我总是登陆主页我在页脚中有3个链接条款和条件联系和隐私政策,它们都显示主页,尽管地址栏中显示的网址被{{正确地转换了1}}是正确的,但加载的视图总是主页你。

注意:我没有像在Yii2指南中那样克隆了public_html文件夹之外的repo,而是我已经在UrlManager内克隆了git repo,我认为它不可行,因为高级应用程序也能正常工作克隆在public_html内而不是外面

2 个答案:

答案 0 :(得分:1)

Yii 2基本应用必须放在public_html目录之外,如文档中所述,您无法在public_html内进行设置,而是必须将web重命名为{{1然后将其克隆到public_html目录之外,以便重命名的文件夹public_html内容覆盖它。

答案 1 :(得分:1)

您可以使用symlinks。您可以将项目放在任何位置,只创建符号链接到托管强制的目录。例如,将项目放在~/domains/example.com/project中并创建符号链接到public_html目录。

cd ~/domains/example.com
# remove old public_html directory
mv public_html old_public_html
# create symlink for webroot
ln -s ./project/web public_html

无需更改项目结构,也无需更改扭曲的重写规则。