我有一个在Nginx上运行的Laravel网站,没关系。
它具有正常的文件夹结构,如:
/app
/public
/vendor
...
/public
文件夹是Laravel index.php所在的位置。
我已在/public/blog
安装了WordPress,因为我希望我的博客在mywebsite.org/blog
处可见。
如果我将/blog/wp-admin/options-permalink.php
中定义的固定链接设置设置为"默认" (这意味着帖子的网址看起来像/blog/?p=123
)。 如果我将永久链接设置更改为/blog/%postname%/
,则无法查看帖子(我会收到Laravel 404页面)。
我绝对希望自己的博客帖子能够使用SEO友好的网址(相当固定的链接)。
我目前的Nginx配置是:
server {
#This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf and seemed to be necessary to get Laravel working.
server_name mysite.local;
# The location of our project's public directory.
root F:/code/mysite/public/;
# Point index to the Laravel front controller.
index index.php;
location / {
# URLs to attempt, including pretty ones.
try_files $uri $uri/ /index.php?$query_string;
}
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
# Yoast WordPress SEO plugin says to add these 2 rewrites:
rewrite ^/blog/sitemap_index\.xml$ /blog/index.php?sitemap=1 last;
rewrite ^/blog/([^/]+?)-sitemap([0-9]+)?\.xml$ /blog/index.php?sitemap=$1&sitemap_n=$2 last;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9123
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(css|js|gif|jpe?g|png)$ {
#images, CSS, and JS have 1 week expiration: http://aspyct.org/blog/2012/08/20/setting-up-http-cache-and-gzip-with-nginx/ See also: http://serverfault.com/questions/339240/chromium-audit-says-its-not-caching-static-content-yet-headers-are-set-who-i
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
}
我花了几个小时审查其他答案(如下所列),并且没有找到如何使其发挥作用。
建议?
P.S。我可以灵活安装WordPress文件(例如,/public/blog
或将其向上移动到/blog
或/wordpress
。
答案 0 :(得分:21)
您将所有内容路由到/
位置的laravel,但是您需要将/blog/
写入/blog/index.php
中的index.php:
location /blog/ {
try_files $uri $uri/ @wordpress;
}
location @wordpress {
rewrite /blog/ /blog/index.php;
}
然后你的php处理程序需要路径信息支持:
location ^/blog/index.php(/.*)?$ {
fastcgi_split_path_info ^(/blog/index.php)(/.*)$;
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_param;
}
如果这不起作用并发布日志信息,请启用错误日志的调试详细程度。
更新:原始提问者注意:
以下是我的新Nginx配置的片段,它似乎适用于以下网址:/,/ blog,/ course,/ blog / innately-happy和/blog/sitemap_index.xml
...
error_log /Users/myuser/code/myproject/storage/logs/nginx_error.log debug;
# Point index to the Laravel front controller.
index index.php;
location /blog/ {
try_files $uri $uri/ @wordpress;
}
location @wordpress {
rewrite /blog/ /blog/index.php;
}
location ^/blog/index.php(/.*)?$ {
fastcgi_split_path_info ^(/blog/index.php)(/.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
...