【问题标题】:Yii2 remove index.php from urlYii2 从 url 中删除 index.php
【发布时间】:2019-07-26 04:16:03
【问题描述】:

当我在 Yii 中设置选项以从 URL 中删除 index.php 时,我收到 404 错误,并且错误日志中的此错误 File does not exist: /var/live/var。在我的浏览器中,我收到此错误The requested URL /var/decat/frontend/web/index.php was not found on this server.,但该文件恰好位于该位置。可以解释的是,我的文档根目录是 /var/live,而 decat 是 conf 文件中显示的别名。

这个 url 工作正常 http://13.21.16.180/decat/index.php/site/login 但是当我删除 index.php 时,我得到了错误。我按照所有说明在 conf 文件中进行了设置。我什至尝试过一个 .htaccess 文件。这是我的 conf 文件中的信息。

Alias /decat /var/decat/frontend/web

<Directory "/var/decat/frontend/web">
        # use mod_rewrite for pretty URL support
        RewriteEngine on
        # If a directory or a file exists, use the request directly
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        # Otherwise forward the request to index.php
        RewriteRule . index.php 
        Options -Indexes FollowSymLinks 
        AllowOverride All
        Order allow,deny 
        Allow from all 
</Directory>

【问题讨论】:

  • 配置看起来不错。你重启apache服务了吗?
  • 我重新启动它,现在我收到了我在问题中发布的新错误
  • 如果您说您的 DocumentRoot 是 /var/live,那么我不明白为什么您的别名是 /var/decat 而不是 var/live。试试Alias /decat /var/live/frontend/web&lt;Directory "/var/live/frontend/web"&gt;...
  • 因为我在文档根目录中没有文件夹来增强安全性,所以我使用别名来访问唯一应该可以访问的文件夹。该文件夹位于 var/decat 中,它与 index.php 一起工作正常,因此别名正常工作
  • 尝试在RewriteEngine on之后添加RewriteBase /decat/(并重启apache)

标签: php yii yii2


【解决方案1】:

RewriteEngine on之后添加RewriteBase /decat/并重启apache。

【讨论】:

    【解决方案2】:

    你应该像这样设置 Url Manager 组件:

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false, // Only considered when enablePrettyUrl is set to true
    ],
    

    官方文档:

    【讨论】:

    • 这就是我设置的,摆脱了 index.php,这就是我得到错误的时候
    • @GauravParasha 他在问题的一开始就提到了错误。
    【解决方案3】:

    您应该将 .htaccess 更改为

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ index.php?r=$1 [L,QSA]
    

    和urlManager规则一样

     'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => array(
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ),
        ],
    

    我在我的应用程序中使用它。它有效。 我的网址是 www.example.com/user/view?id=1

    【讨论】:

    • 在服务器进行这些配置之后,我们还需要启用 mod_rewrite。在终端运行这些命令sudo a2enmod rewrite sudo service apache2 restart 现在转到“/etc/apache2/apache2.conf”打开它您最喜欢的编辑器并将“AllowOverride none”更改为“AllowOverride All " 保存您的更改,您需要通过上述命令再次重新启动 Apache。文件将处于只读模式。所以确保root登录所以先添加“su”命令su vim /etc/apache2/apache2.conf sudo service apache2 restarttutsnare.com/remove-index-php-from-url-in-yii2
    【解决方案4】:

    yii2 从网址中删除网页

    1) 使用以下内容编辑您的 config/web.php 文件

    <?php
    use \yii\web\Request;
    
    $baseUrl = str_replace('/web', '', (new Request)->getBaseUrl());
    
    return [
        ...
        'components' => [
                'request' => [
                    'baseUrl' => $baseUrl,
         ],
          ...
        ]
    ]
    ?>
    

    2) 将以下 htaccess 添加到 root/web

    RewriteEngine On RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule . index.php
    

    3) 将以下 htaccess 添加到安装应用程序的根文件夹

    # prevent directory listings
    Options -Indexes
    IndexIgnore */*
    
    # follow symbolic links
    Options FollowSymlinks
    RewriteEngine on
    RewriteRule ^(.+)?$ web/$1
    

    【讨论】:

      【解决方案5】:

      我认为是您的 Apache 配置错误...您是在告诉它在我阅读它时只重写单个字符的请求?

      我认为应该是:

      RewriteRule ^/(.*) index.php/$1 [L]
      

      但我可能是错的,不是apache 专家

      【讨论】:

      • File does not exist: /var/decat/frontend/web/site 出现此错误,应该是 web/index.php 而不是 site,但这是我在重新启动 apache 服务之前遇到的相同错误
      • 我的答案中没有使用site,不知道你指的是什么。
      • 你应该打开你的 index.php 文件,并在它的开头加上die("here"); 之类的东西(在任何事情完成之前)。如果输出的是错误而不是错误,则您的 apache 配置正确并将事物传递给 yii。
      • 这样做了,我得到了同样的结果
      • 意味着它永远不会到达 Yii 并且它是您的 Apache 配置中的一个问题。您确定它正在读取您的配置吗?您可能应该对重写设置进行一些思考。这种情况很难诊断。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2014-10-28
      • 2012-06-15
      • 2011-05-20
      • 2012-09-21
      相关资源
      最近更新 更多