我在服务器上安装了nginx,FastCGI和PHP。经过一番怪兽争霸后安装了WordPress 3.0,但它安装并运行良好。
但是,当我将固定链接设置更改为默认设置以外的任何设置时,我会在每个帖子,文章和页面上收到404错误。
我知道这与nginx不支持.htaccess和WordPress与页面被请求时的去向相混淆。
我在nginx conf文件甚至nginx兼容性插件中尝试了一些重写;都没有奏效。通过一次重写,我设法停止了404错误,但是在我获得PHP确认页面之后,我没有找到WordPress的帖子。呸。
论坛上到处都是有类似问题的人。有没有人有解决方案?
答案 0 :(得分:16)
在您的位置/区块,
添加此项并删除任何非特定的重写规则:
try_files $uri $uri/ /index.php;
答案 1 :(得分:6)
如果wordpress在根目录之外的另一个目录上,而不是
if (!-e $request_filename) {
rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last;
}
你可以:
location /wordpress {
try_files $uri $uri/ /wordpress/index.php?$args;
}
此页面具有完全相同的概念。我应该先阅读并尝试一下:nginx rewrite rule under a subdirectory
答案 2 :(得分:5)
痛苦之后:
# 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。它有点慢,我想我可能会尝试不使用查询,但它确实有效...... :)
答案 3 :(得分:2)
您是否尝试过nginx Compatibility plugin?
Plus ElasticDog似乎提供了一个公平的concise article on getting WP working with nginx - 其中包括让相当多的永久链接工作。
这是另一篇似乎专门针对nginx rewrite rules for WordPress的文章。
答案 4 :(得分:2)
这就是我在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 reload
有些说明:
ftpusername和example.com必须根据您的系统进行更改。
就是这样!
祝大家好运。
答案 5 :(得分:0)
如果你使用/ 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;
}
答案 6 :(得分:0)
我做了以下事情..
在文件夹中 /home/userrunningnginx/nginx/domain.com
我有:
default.conf(文件)
include /home/neukbaarofnietps/nginx/neukbaarofniet.com/drop;
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;
}
答案 7 :(得分:0)
将此块添加到您的nginx.conf应该可以解决问题:
if (!-e $request_filename) {
rewrite ^/wordpress_dir/(.+)$ /wordpress_dir/index.php?q=$1 last;
}
希望这有帮助。
祝你好运。