【问题标题】:Remove public/index.php from url in Lavarel App从 Laravel 应用程序的 url 中删除 public/index.php
【发布时间】:2020-08-12 19:52:32
【问题描述】:

在我拥有的本地 PC 上使用 Apache2 在 Ubuntu 18.04LTS 上创建了我的第一个 Laravel 应用程序(使用 Lavarel 7.x)。

按照Lavarel Docs的设置说明,一切顺利。
一个问题是网址:

http://localhost/lavarel-project1/ - returns the directory listing

apache2 虚拟主机文件如下所示:

<VirtualHost *:80>
   DocumentRoot /var/www/html/lavarel-project1/public

   <Directory /var/www/html/lavarel-project1/public>
       AllowOverride All
       Require all granted
   </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

从网上的研究 - 文章说从 Lavarel App 根目录复制 server.php 文件并将其重命名为 index.php。 这可行,但随后在应用程序中创建了路由,发现了 url 的其他问题:

http://localhost/lavarel-project1/ - works
http://localhost/lavarel-project1/catlog/ - doesn't work
http://localhost/lavarel-project1/public/index.php/catlog - works

以下是公用文件夹中.htaccess文件的内容:

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
      Options -MultiViews -Indexes
  </IfModule>

  RewriteEngine On

  # Handle Authorization Header
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

  # Redirect Trailing Slashes If Not A Folder...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} (.+)/$
  RewriteRule ^ %1 [L,R=301]

  # Send Requests To Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

在网络上研究了这个问题 - 如何从 url 中删除 public/index.php,但收效甚微 - 所有推荐的方法都不起作用,因此在此处提出问题。

提前致谢。

【问题讨论】:

  • 您是否尝试过启用 mod_rewrite ? sudo a2enmod rewrite 然后重启apache:sudo systemctl restart apache2;我的第二个问题是,您的公用文件夹中有 .htaccess 文件吗?
  • @forloops,感谢您的帮助。我已经在 apache2 上启用了 mod_write 并重新启动它。还是有问题。是的,我在 lavarel 应用程序的公用文件夹中确实有一个(.htaccess 文件)。我会将内容添加到问题中。

标签: php laravel apache ubuntu-18.04


【解决方案1】:

我认为您不应该将“/public”放在目录标签中。

试试这个:

` DocumentRoot /var/www/html/lavarel-project1/public

<Directory /var/www/html/lavarel-project1>
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
`

这是我的配置,工作正常。

【讨论】:

    【解决方案2】:
     <VirtualHost *:80>
    
     ServerName laravel.dev
     ServerAlias www.laravel.dev
     DocumentRoot /var/www/html/lavarel-project1/public
     
        <Directory /var/www/html/lavarel-project1/public/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
            Require all granted
        </Directory>
     
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2015-10-11
      • 2019-12-27
      • 2014-07-13
      • 1970-01-01
      • 2017-01-03
      • 2016-07-30
      • 2020-06-07
      相关资源
      最近更新 更多