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

时间:2016-08-02 09:25:48

标签: php wordpress .htaccess laravel http

我的 public_html 文件夹中有一个 Laravel 项目。该域名例如 domain.com 我的.htaccess文件(在public_html文件夹中)是这样的:

<IfModule mod_rewrite.c>
    RewriteEngine On

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

有以下路线:

  • API / licenseplate
  • API /日历
  • AUTH /登录
  • 管理员/设置
  • 管理员/约会
  • 预约
  • ...

因此,网址示例为 http://domain.com/appointment

现在我想在domain.com上有一个wordpress网站。因此,当您访问domain.com时,您会看到wordpress网站。但是我也希望像我的laravel项目这样的网址。

最简单,最干净的方法是什么?

3 个答案:

答案 0 :(得分:12)

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

/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

<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的副本):

# 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

答案 1 :(得分:3)

服务器结构

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

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

文件夹结构

/var/www/public_html/laravel
/var/www/public_html/wp

/var/www/public_html/.htaccess

# 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

/**
 * 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);
}

通过编辑app/helpers.php

composer.json添加到自动加载流程
"autoload": {    
    //...
    "files": [
        "app/helpers.php"
    ]
},

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

composer dump-autoload

答案 2 :(得分:2)

这是我遇到类似情况时采用的方法。在wordpress目录中安装public_html,最好将laravel application放在WP目录中:

wp-admin/  
wp-content/  
wp-includes/  
... other wordpress files ...
app/ <-- laravel application  
     |-> app/
     |-> bootstrap/
     |-> config/
     |-> public/
     |-> ... other laravel files and directories ...
  

现在要在WordPress functions中提供Laravel application,请在wp-load.php安装中添加Laravel   然后您可以使用enqueueing functions中的WordPress   加载你需要的资产。

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

// 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:

 /* ... */
   'providers' => [
        // ...

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

现在我们可以访问Laravel中的WordPress功能,并可以将laravel views更改为:

{!! get_header() !!}
        <div class="container">
            <div class="content">
                <div class="title">Laravel 5</div>
                <div class="quote">{{ Inspiring::quote() }}</div>
            </div>
        </div>
{!! get_footer() !!}

如果您希望使用其他网址格式,则可以在www.urdomain.com访问您的wordpress网站,在网址www.urdomain.com/app/appointment下访问laravel app,或调整.htaccess。希望这有帮助。