我在我的服务器上安装了nginx,FastCGI和PHP。 WordPress 3.0安装了一些怪物战斗之后,但安装和运行良好。
但是,当我将永久链接设置更改为默认设置以外的任何内容时,我在每篇文章,每篇文章和每页上都会遇到404错误。
我知道这是与nginx不支持.htaccess和WordPress混淆当页面被请求时去的地方。
我已经尝试了几次重写nginx conf文件甚至是nginx兼容性插件; 没有工作。 有一个重写,我设法阻止404错误,而不是WordPress发现后,我只是得到我的PHP确认页。 呸。
论坛上散布着类似问题的人。 有没有人有办法解决吗?
在你的位置/街区,
添加这个并删除任何非特定的重写规则:
try_files $uri $uri/ /index.php;
如果wordpress在另一个根目录之外,而不是
if (!-e $request_filename) { rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last; }
你可以有:
location /wordpress { try_files $uri $uri/ /wordpress/index.php?$args; }
这个页面有完全一样的概念。 我应该先阅读并尝试一下: 在一个子目录下的nginx重写规则
经过很多痛苦:
# if filename doesn't exist, take the request and pass to wordpress as a paramater if (!-e $request_filename) { rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last; }
如果请求的文件不存在,则将其传递给index.php。 这有点慢,我想我可以尝试不使用查询,但它确实工作… 🙂
你有没有尝试过nginx兼容性插件 ?
另外ElasticDog似乎提供了一个相当简洁的文章,让WP与nginx一起工作 – 其中包括获得漂亮的固定链接工作。
这是另一篇文章,似乎专门处理WordPress的nginx重写规则 。
这就是我在dreamhost的wordpress博客中解决我的永久链接的方法。
在文件夹/home/ftpusername/nginx/example.com/
(如果你没有,创建它)
用下面的内容创建了nginx.conf文件
location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; }
重新启动了nginx
/etc/init.d/nginx重新加载
一些说明:
ftpusername和example.com必须根据您的系统进行更改。
就是这样!
祝你好运。
如果您使用的地点不是/ like,这不起作用:
〜.php $,我的意思是说,漂亮的链接将工作,但你的图形将在所有的地方。 所以你需要的是下面的确切说明。
location ~ \.php$ { try_files $uri $uri/ /index.php?$uri&$args; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } if (!-e $request_filename){ rewrite ^(.*)$ /index.php?url=$1 break; }
我做了以下..
在/home/userrunningnginx/nginx/domain.com文件夹中
我有:
default.conf(文件)
include /home/neukbaarofnietps/nginx/neukbaarofniet.com/drop;
放下(档案)
# Rather than just denying .ht* in the config, why not deny # access to all .invisible files location ~ /\. { deny all; access_log off; log_not_found off; }
nginx.conf(文件)
location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args;
}
WORDPRESS-NGINX.CONF(文件)
####################### # WP Super Cache # if the requested file exists, return it immediately if (-f $request_filename) { break; } set $supercache_file ''; set $supercache_uri $request_uri; if ($request_method = POST) { set $supercache_uri ''; } # Using pretty permalinks, so bypass the cache for any query string if ($query_string) { set $supercache_uri ''; } if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { set $supercache_uri ''; } # if we haven't bypassed the cache, specify our supercache file if ($supercache_uri ~ ^(.+)$) { set $supercache_file /wp-content/cache/supercache/$http_host$1/index.html; } # only rewrite to the supercache file if it actually exists if (-f $document_root$supercache_file) { rewrite ^(.*)$ $supercache_file break; } # all other requests go to WordPress if (!-e $request_filename) { rewrite ^.*$ /index.php last; }
将这个块添加到你的nginx.conf中应该可以解决这个问题:
if (!-e $request_filename) { rewrite ^/wordpress_dir/(.+)$ /wordpress_dir/index.php?q=$1 last; }
希望这可以帮助。
祝你好运。