我的public_html文件夹中有一个Laravel项目。例如,域名为domain.com My .htaccess文件(在public_html文件夹中)如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
有以下路由:
例如,就是一个网址。
现在我想在domain.com上建立一个wordpress网站。所以当你访问domain.com时,你会看到wordpress网站。但我也想拥有像我的laravel项目的/appointment这样的urls。
做这件事最简单最干净的方法是什么?
发布于 2016-08-05 15:50:54
您可以在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
发布于 2016-08-09 08:00:25
服务器结构
.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);
}
通过编辑composer.json
将app/helpers.php
添加到自动加载过程中
"autoload": {
//...
"files": [
"app/helpers.php"
]
},
如果您有命令行访问权限,请更新PHP composer
composer dump-autoload
发布于 2016-08-09 19:31:08
这是我在遇到类似情况时采取的一种方法。在public_html
目录下安装你的wordpress
,最好把你的laravel application
放在WP目录下:
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
加载资产:
// 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() !!}
你的wordpress站点应该可以通过url www.urdomain.com/app/appointment
下的www.urdomain.com
和laravel app访问,或者如果你想要一个不同的URL模式,可以调整你的.htaccess
。希望这能有所帮助。
https://stackoverflow.com/questions/38716585
复制相似问题