我的 public_html 文件夹中有一个 Laravel 项目。该域名例如 domain.com 我的.htaccess文件(在public_html文件夹中)是这样的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
有以下路线:
因此,网址示例为 http://domain.com/appointment 。
现在我想在domain.com上有一个wordpress网站。因此,当您访问domain.com时,您会看到wordpress网站。但是我也希望像我的laravel项目这样的网址。
最简单,最干净的方法是什么?
答案 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
# 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"
]
},
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
。希望这有帮助。