遗留项目中的 Laravel 项目

问题描述 投票:0回答:1

我正在尝试让 Laravel 项目在遗留站点中运行,同时我们致力于使整个代码库现代化。我已经能够使用 valet 创建自定义代客驱动程序使其在我的开发计算机中工作,但我正在努力将 apache 配置为以相同的方式工作。

我在 apache 上的虚拟主机配置看起来像(已编辑):

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerName "xxxxxxxxxxx:443"
                UseCanonicalName Off

                DocumentRoot "/var/www/xxxx/dev"
                CustomLog /var/log/apache2/xxxx/logs/dev_access_ssl_log combined
                ErrorLog "/var/log/apache2/xxxx/logs/dev_error_log"
                Alias /laravel /var/www/xxxx/dev/laravel/public


                <Directory /var/www/xxxx/dev>
                        SSLRequireSSL

                        Options -Includes -ExecCGI

                </Directory>
                <Directory /var/www/xxxx/dev>
                        Options +FollowSymLinks
                </Directory>
                DirectoryIndex "index.html" "index.cgi" "index.pl" "index.php" "index.xhtml" "index.htm" "index.shtml"

                <Directory /var/www/xxxx/dev>
                        AllowOverride All
            # AuthConfig FileInfo Indexes Limit Options=Indexes,SymLinksIfOwnerMatch,MultiViews,FollowSymLinks,ExecCGI,Includes,IncludesNOEXEC
                </Directory>
            <Directory /var/www/xxxx/laravel/public>
                AllowOverride All
            </Directory>
      </VirtualHost>
</IfModule>

(已编辑) 我更改了项目结构,恢复了公共目录的默认位置,并且在我的 Valet 配置中再次正常工作。

这是 /laravel/public 目录中的 .htaccess 文件:


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

    RewriteEngine On
    RewriteBase /laravel
    # 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]

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

我添加了与 laravel 标准 htaccess 文件不同的 RewriteBase 指令,以便使所有请求保留在 /laravel (这是每个虚拟主机文件中 /laravel/public 的别名)

每当我尝试访问 /laravel/admin (这是 /routes 下的 web.php 文件中配置的路由)之类的内容时,我仍然会收到 404 错误(刀片样式)。 我很确定我搞砸了重写和重定向,但我在没有任何进展的情况下一直在努力。

令我完全困惑的是,在 Valet 上只需要 10 行代码:

    public function frontControllerPath(string $sitePath, string $siteName, string $uri):string
    {
        $ext = pathinfo($uri, PATHINFO_EXTENSION);
        if($ext != '') {
            return $uri = $sitePath.$uri;
        } else {
         if($uri == '/') {
           return $sitePath.'/index.php';
         } elseif (str_contains($uri,'/laravel')) {
           return $sitePath.'/laravel/public/index.php';
         }
         else {
           return $uri == '/admin/' ? $sitePath . '/admin/index.php' : $sitePath. $uri . '.php';
         }
        }
    }
laravel apache .htaccess mod-rewrite legacy-code
1个回答
0
投票

事实证明这不是重写问题。 或者更好的是,确实如此,但这不是真正的问题。

将项目重构为标准项目后,我必须稍微调整主遗留项目中的 .htaccess 文件,并创建一个 laravel.php 文件,该文件仅包含公共 Laravel 项目中原始 index.php 的 require_once 。

主要问题是两个View组件拼写错误,没有第一个大写字母,所以基本上刀片找不到它们。

© www.soinside.com 2019 - 2024. All rights reserved.