首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Wordpress项目旁边的Laravel项目(在public_html文件夹中)

Wordpress项目旁边的Laravel项目(在public_html文件夹中)
EN

Stack Overflow用户
提问于 2016-08-02 17:25:48
回答 3查看 2.4K关注 0票数 19

我的public_html文件夹中有一个Laravel项目。例如,域名为domain.com My .htaccess文件(在public_html文件夹中)如下所示:

代码语言:javascript
复制
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

有以下路由:

  • api/licenseplate
  • api/calendar
  • auth/login
  • admin/settings
  • admin/appointments
  • appointment
  • ...

例如,就是一个网址。

现在我想在domain.com上建立一个wordpress网站。所以当你访问domain.com时,你会看到wordpress网站。但我也想拥有像我的laravel项目的/appointment这样的urls。

做这件事最简单最干净的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-05 15:50:54

您可以在Laravel文件夹中创建指向Wordpress公共目录的符号链接。例如,wp

代码语言:javascript
复制
/var
     /www
         /laravel
             /public
                 /wp #(symlink to -> /var/www/wordpress/public_html)
                 index.php
                 .htaccess
         /wordpress
             /public_html
                 index.php
                 .htaccess

和描述.htaccess中的Laravel路由。/var/www/laravel/public/.htaccess代码示例

代码语言:javascript
复制
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{ENV:REDIRECT_FINISH} .
    RewriteRule ^ - [L]

    # Laravel

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteCond %{REQUEST_FILENAME} !.*\.php$
    RewriteRule ^(.*)$ $1 [E=FINISH:1,L]

    RewriteCond %{REQUEST_URI} ^/(api/licenseplate)(\?.*|$) [OR]
    RewriteCond %{REQUEST_URI} ^/(api/calendar)(\?.*|$) [OR]
    RewriteCond %{REQUEST_URI} ^/(admin/settings)(\?.*|$) [OR]
    RewriteCond %{REQUEST_URI} ^/(admin/appointments)(\?.*|$) [OR]
    RewriteCond %{REQUEST_URI} ^/(appointment)(\?.*|$) [OR]
    RewriteCond %{REQUEST_URI} ^/(auth/login)(\?.*|$)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [E=FINISH:1,L]

    # Wordpress

    RewriteCond %{REQUEST_URI} !^/wp
    RewriteRule ^(.*)$ /wp/$1 [E=FINISH:1,L]

</IfModule>

/var/www/wordpress/public_html/.htaccess的代码(只是你的wordpress .htaccess的副本):

代码语言:javascript
复制
# BEGIN WordPress

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# END WordPress
票数 13
EN

Stack Overflow用户

发布于 2016-08-09 08:00:25

服务器结构

.htaccess文件提供了一种对每个目录进行配置更改的方法。这意味着您只需要将请求定向到具有如何最好地处理请求的规则的目录。因此,您将把Laravel和WordPress附带的.htaccess文件留在它们的目录中。只需为同时包含它们的父目录创建另一个。

下面假设public_html的完整路径为/var/www/public_html

文件夹结构

代码语言:javascript
复制
/var/www/public_html/laravel
/var/www/public_html/wp

/var/www/public_html/.htaccess

代码语言:javascript
复制
# Limit Access To Laravel Public Folder
<Directory "/var/www/public_html/laravel">
    Order Deny,allow
    Deny from all
</Directory>

<Directory "/var/www/public_html/laravel/public">
    Allow from all
</Directory>

# Rewrite Requests
<IfModule mod_rewrite.c>

    RewriteEngine On

    # Do Not Rewrite Directory And File Requests
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*)$ $1 [L]

    # Rewrite Laravel Routes
    RewriteCond %{REQUEST_URI} api/licenseplate [OR]
    RewriteCond %{REQUEST_URI} api/calendar [OR]
    RewriteCond %{REQUEST_URI} admin/settings [OR]
    RewriteCond %{REQUEST_URI} admin/appointments [OR]
    RewriteCond %{REQUEST_URI} appointment [OR]
    RewriteCond %{REQUEST_URI} auth/login
    RewriteRule ^(.*)$ laravel/public/$1 [L]

    # Rewrite To WordPress For Everything Else
    RewriteRule ^(.*)$ wp/$1 [L]

</IfModule>

应用程序设置

Laravel和WordPress都有方法生成指向其资产(图像、CSS、JavaScript)的链接。

构建WordPress可以轻松地将其安装到子目录中,因此您只需更改General Settings Screen上的WordPress地址和站点地址。

Laravel假设它已安装到顶层目录。asset() helper用于生成资源文件的路径。因此,您需要使用您自己的函数来覆盖默认函数。下面是如何实现的:

使用这些内容创建app/helpers.php

代码语言:javascript
复制
/**
 * Generate an asset path for the application
 * with the installation sub-directory 
 * prepended to the path.
 *
 * @param  string  $path
 * @param  bool    $secure
 * @return string
 */
function asset($path, $secure = null)
{
    $path = ltrim($path, '/');
    $dir = basename(dirname(__DIR__)) . '/public';
    $url = app('url')->asset($path, $secure);
    return str_replace($path, $dir . '/' . $path, $url);
}

通过编辑composer.jsonapp/helpers.php添加到自动加载过程中

代码语言:javascript
复制
"autoload": {    
    //...
    "files": [
        "app/helpers.php"
    ]
},

如果您有命令行访问权限,请更新PHP composer

代码语言:javascript
复制
composer dump-autoload
票数 3
EN

Stack Overflow用户

发布于 2016-08-09 19:31:08

这是我在遇到类似情况时采取的一种方法。在public_html目录下安装你的wordpress,最好把你的laravel application放在WP目录下:

代码语言:javascript
复制
wp-admin/  
wp-content/  
wp-includes/  
... other wordpress files ...
app/ <-- laravel application  
     |-> app/
     |-> bootstrap/
     |-> config/
     |-> public/
     |-> ... other laravel files and directories ...

现在要在您的Laravel application中获得可用的WordPress functions,请将wp-load.php包含在您的Laravel安装中,然后您可以使用WordPress中的enqueueing functions加载所需的资源。

最好的方法是遵循Laravel服务提供商架构。编写一个包含wp-load.php的服务提供者,并使用boot function加载资产:

代码语言:javascript
复制
// app/Providers/WordPressServiceProvider.php

class WordPressServiceProvider extends ServiceProvider {

    protected $bootstrapFilePath = '../../wp-load.php'; // Adjust ur path

    public function boot() {
        // Load assets
        wp_enqueue_style('app', '/app/public/app.css'); // Adjust ur path
    }

    public function register() {
        // Load wordpress bootstrap file
        if(File::exists($this->bootstrapFilePath)) {
            require_once $this->bootstrapFilePath;
        } else throw new \RuntimeException('WordPress Bootstrap file not found!');
    }

}

并将服务提供商添加到您的laravel应用程序配置中,即config/app.php:

代码语言:javascript
复制
 /* ... */
   'providers' => [
        // ...

        /*
         * Application Service Providers...
         */
        // ...
        App\Providers\WordPressServiceProvider::class,

现在,我们可以访问Laravel中的WordPress函数,并可以将laravel views更改为以下内容:

代码语言:javascript
复制
{!! get_header() !!}
        <div class="container">
            <div class="content">
                <div class="title">Laravel 5</div>
                <div class="quote">{{ Inspiring::quote() }}</div>
            </div>
        </div>
{!! get_footer() !!}

你的wordpress站点应该可以通过url www.urdomain.com/app/appointment下的www.urdomain.com和laravel app访问,或者如果你想要一个不同的URL模式,可以调整你的.htaccess。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38716585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档