php Nginx - 子目录中的wordpress,应该传递什么数据?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6154879/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Nginx - wordpress in a subdirectory, what data should be passed?
提问by Matthew
I've tried so many different things. The point I'm at right now is this:
我尝试了很多不同的东西。我现在的重点是:
location ^~ /wordpress {
alias /var/www/example.com/wordpress;
index index.php index.html index.htm;
try_files $uri $uri/ /wordpress/index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(/wordpress)(/.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/example.com/wordpress/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Right now, all resources as far as I can tell (images, etc) are loading correctly. And http://www.example.com/wordpress
loads wordpress, but a page that says "page not found". (Wordpress is in use for this though). If I try any post urls I get the same result, "page not found". So I know the problem is that wordpress isn't obtaining the data about the path or something. Another potential problem is that if I run example.com/wp-admin.php
then it will still run index.php
.
现在,据我所知,所有资源(图像等)都正确加载。并http://www.example.com/wordpress
加载 wordpress,但页面显示“找不到页面”。(不过,Wordpress 正在为此使用)。如果我尝试任何帖子网址,我都会得到相同的结果,“找不到页面”。所以我知道问题在于 wordpress 没有获取有关路径或其他内容的数据。另一个潜在的问题是,如果我运行,example.com/wp-admin.php
它仍然会运行index.php
。
What data needs to be passed? What may be going wrong here?
需要传递什么数据?这里可能出了什么问题?
回答by kolbyHyman
Since your location alias end match, you should just use root. Also, not everythingis routed through index.php on wordpress afaik. Also, unless you know you need path info, you probably dont. I think you want something like:
由于您的位置别名结束匹配,您应该只使用 root。此外,并非所有内容都通过 wordpress afaik 上的 index.php 进行路由。此外,除非您知道需要路径信息,否则您可能不需要。我想你想要这样的东西:
location @wp {
rewrite ^/wordpress(.*) /wordpress/index.php?q=;
}
location ^~ /wordpress {
root /var/www/example.com;
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass 127.0.0.1:9000;
}
}
or if you really do need path info (urls look like /wordpress/index.php/foo/bar):
或者如果您确实需要路径信息(网址看起来像 /wordpress/index.php/foo/bar):
location ^~ /wordpress {
root /var/www/example.com;
index index.php index.html index.htm;
try_files $uri $uri/ /wordpress/index.php;
location ~ \.php {
fastcgi_split_path_info ^(.*\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
}
}
EDIT: Updated first server{} to strip initial /wordpress from uri and pass remainder as q param
编辑:更新第一台服务器{}以从 uri 中去除初始 /wordpress 并将余数作为 q 参数传递
EDIT2: Named locations are only valid at server level
EDIT2:命名位置仅在服务器级别有效
回答by Antony Smith
Dude, this will work for for a wordpress blog in a subdirectory of the magento root folder!
伙计,这适用于 magento 根文件夹子目录中的 wordpress 博客!
server {
listen 80;
server_name my-site.co.uk;
rewrite / $scheme://www.$host$request_uri permanent; ## Forcibly prepend a www
}
server {
listen 80 default;
client_max_body_size 8M;
## SSL directives might go here
server_name www.my-site.co.uk; ## Domain is here twice so server_name_in_redirect will favour the www
root /var/www/my-site/magento;
location / {
index index.html index.php; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
expires 30d; ## Assume all files are cachable
}
location /wordpress {
index index.php index.html index.htm;
try_files $uri $uri/ /wordpress/index.php;
}
## These locations would be hidden by .htaccess normally
location ^~ /app/ { deny all; }
location ^~ /includes/ { deny all; }
location ^~ /lib/ { deny all; }
location ^~ /media/downloadable/ { deny all; }
location ^~ /pkginfo/ { deny all; }
location ^~ /report/config.xml { deny all; }
location ^~ /var/ { deny all; }
location /var/export/ { ## Allow admins only to view export folder
auth_basic "Restricted"; ## Message shown in login window
auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
autoindex on;
}
location /. { ## Disable .htaccess and other hidden files
return 404;
}
location @handler { ## Magento uses a common front handler
rewrite / /index.php;
}
location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ last;
}
location ~ .php$ { ## Execute PHP scripts
if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss
expires off; ## Do not cache dynamic content
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param HTTPS $fastcgi_https;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
fastcgi_param MAGE_RUN_TYPE store;
include fastcgi_params; ## See /etc/nginx/fastcgi_params
}
}
回答by NightKnight on Cloudinsidr.com
I had the same problem and this is what fixed it for me:
我遇到了同样的问题,这就是为我解决的问题:
Open the NGINX configuration file for your site. Inside of the server block, add the path to your root directory and set the priority order for files:
root /mnt/www/www.domainname.com; index index.php index.html index.htm;
Create an empty location block beforeall your other location blocks:
location /latest { # Nothing in here; this is to avoid redirecting for this location }
Commend out the root directory in your location / block and add the redirection so it looks like this:
location / { # root /mnt/www/www.domainname.com; index index.php index.html index.htm; rewrite ^/(.*)$ http://www.domainname.com/latest/ redirect; }
Make sure that your location ~ .php$ block points its root to
root /mnt/www/www.domainname.com;
打开您站点的 NGINX 配置文件。在 server 块内,将路径添加到您的根目录并设置文件的优先级顺序:
root /mnt/www/www.domainname.com; index index.php index.html index.htm;
在所有其他位置块之前创建一个空的位置块:
location /latest { # Nothing in here; this is to avoid redirecting for this location }
在您的位置/块中标出根目录并添加重定向,使其看起来像这样:
location / { # root /mnt/www/www.domainname.com; index index.php index.html index.htm; rewrite ^/(.*)$ http://www.domainname.com/latest/ redirect; }
确保您的位置 ~ .php$ 块将其根指向
root /mnt/www/www.domainname.com;
This fixed it for me.
这为我修好了。