事实证明,由于nginx不使用它,所以我试图编辑.htaccess时出错了。我显然需要做的是编辑.conf文件。在我读这篇文章之前,my_app.conf看起来像这样:
upstream backend {
server unix:/u/apps/my_app/tmp/php.sock;
}
server {
listen 80 default;
root /u/apps/my_app/www;
index index.php;
access_log /u/apps/my_app/logs/access.log;
error_log /u/apps/my_app/logs/error.log;
location / {
try_files $uri $uri/ /index.php;
}
# This location block matches anything ending in .php and sends it to
# our PHP-FPM socket, defined in the upstream block above.
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name;
include fastcgi_params;
}
# This location block is used to view PHP-FPM stats
location ~ ^/(php_status|php_ping)$ {
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1;
deny all;
}
# This location block is used to view nginx stats
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
现在看起来像这样,它仍然无法正常工作:
upstream backend {
server unix:/u/apps/my_app/tmp/php.sock;
}
server {
listen 80 default;
root /u/apps/my_app/www;
index index.php;
access_log /u/apps/my_app/logs/access.log;
error_log /u/apps/my_app/logs/error.log;
location / {
try_files $uri $uri/ /index.php;
}
location /wordpress/ {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2 |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
# Uncomment one of the lines below for the appropriate caching plugin (if used).
#include global/wordpress-wp-super-cache.conf;
#include global/wordpress-w3-total-cache.conf;
# This location block matches anything ending in .php and sends it to
# our PHP-FPM socket, defined in the upstream block above.
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name;
include fastcgi_params;
}
# This location block is used to view PHP-FPM stats
location ~ ^/(php_status|php_ping)$ {
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1;
deny all;
}
# This location block is used to view nginx stats
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
任何人都知道我在做什么错我已将我的永久链接从默认更改为/%postname%/,现在WordPress管理面板中的链接给我404错误-不是WordPress 404页面,nginx 404页面。查找为什么要告诉我这应该是编辑我的.htaccess文件还是告诉WordPress不能重写.htaccess-.htaccess文件不存在,并且当我更改固定链接时WordPress没有给出任何错误。
我尝试在wordpress文件夹中创建一个空白的.htaccess文件,为其分配666权限,将用户和组更改为www-data,然后更改永久链接-这不起作用。然后,我在更改永久链接之前将其更改为此:
# 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
如果不起作用,我在再次更改永久链接之前将
RewriteBase
更改为/wordpress/
-仍然没有。我也进入了我网站的.conf文件并将
try_files $uri $uri/ /index.php;
更改为以下内容,每次都重新启动nginx和php5-fpm; try_files $uri $uri/ /index.php?$query_string;
try_files $uri $uri/ /index.php?q=$request_uri;
try_files $uri $uri/ /index.php?$args;
我正在使用nginx运行家庭服务器。关于这里发生的事情有什么想法吗?
#1 楼
这些是Apache.htaccess
的重写规则,但是您已经声明自己在Nginx服务器上。 Nginx不使用类似.htaccess
的目录级文件,更不用说使用.htaccess
文件本身了。您需要编辑服务器配置本身。该法典有一个详细的示例:# WordPress single blog rules.
# Designed to be included in any server {} block.
# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
# Uncomment one of the lines below for the appropriate caching plugin (if used).
#include global/wordpress-wp-super-cache.conf;
#include global/wordpress-w3-total-cache.conf;
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
# This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)
include fastcgi.conf;
fastcgi_index index.php;
# fastcgi_intercept_errors on;
fastcgi_pass php;
}
#2 楼
我正在使用具有自定义永久链接设置的wordpress多站点:/%category%/%postname%//etc/nginx/site-available/domain.conf
在服务器上{
location / {
try_files $uri $uri/ /index.php?q=$uri$args;
}
如果您的root wordpress不是webroot,而是http://domain.com/wordpress/:
location /wordpress/ {
try_files $uri $uri/ /wordpress/index.php?q=$uri$args;
}
如果将旧的wordpress与blogs.dir一起使用,请添加:
location ^〜/blogs.dir {
internal;
别名/ var / www / wordpress / wp- content / blogs.dir;
access_log关闭; log_not_found关闭; max到期;
}
检查nginx配置:
sudo nginx -t
重新加载nginx:
sudo服务nginx重新加载
也尝试更改永久链接设置。
评论
对于想要手动将WordPress安装移动到新域名下的子目录的任何人来说,这都是最佳答案!非常感谢!这应该是公认的答案。
–specialk1st
17年1月24日在13:25
路径:/ etc / nginx / site-available /应该显示为:/ etc / nginx / sites-available /
–授予
18-2-20在10:14
第二个选项对我有用,因为我的网站位于子目录中
–阿伦endra
20-10-19在2:37
#3 楼
不得不将这段代码添加到/sites-available/your-settings-file
和/sites-enabled/your-settings-file
:server {
[...]
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
[...]
}
现在对我有用。
评论
这是我一直在寻找的简单答案,谢谢
– ThEBiShOp
17年6月28日在19:15
这工作了!您能解释一下它的作用吗? (尤其是“最后”部分...)
–Sidd
18年8月12日在18:50
此代码仍然有效!
–朱利奥·莱昂(Julio de Leon)
20-09-16在17:34
#4 楼
我必须将根路径设置为wordpressś安装目录:root / var / www / html / wp;
我不喜欢它,因为我在此计算机上安装了更多应用程序,但创建了更多应用程序虚拟主机应该足够了。
#5 楼
步骤1.编辑/etc/nginx/site-available/example.comlocation / {
try_files $uri $uri/ /index.php?q=$uri$args;
}
步骤2:登录到服务器
步骤3。运行此操作
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
步骤4.测试配置
sudo nginx -t
步骤5.重新启动Nginx服务器
sudo systemctl restart nginx
步骤6.从wordpress管理仪表板中保存永久链接
*****快乐浏览****
更多详细信息
http ://toihid.com/wordpress-permalink-in-nginx-server/
评论
谢谢,如果我有声誉,我会投票赞成。我在将它实现到.conf文件中时遇到了一些麻烦,因为它已经比默认设置有了很大的变化,但是至少我不再摆弄.htaccess了。
– ninjachicken1
15年5月21日在19:32
@s_ha_dum,直到昨天我更新到wordpress 4.8时,我才一直使用thies的配置,现在我在永久链接自定义结构上得到了404s ....尝试从昨天开始对其进行调试,但没有问题,没有任何想法吗?
–杰迪(Jadeye)
17年7月4日在14:32
我不得不将最后一行更改为“ fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;”。可以在Ubuntu 18.04上运行,但是它可以正常工作并节省了理智
–Rob
18/12/17在3:24