最近从Apache切换到nginx。这在apache下很好用,但不知道如何为nginx添加它。尝试过htaccess到nginx转换器,但是它们让我重定向循环。
我在根目录中有WordPress,在子目录下有自定义代码。
这是Apache上正在运行的.htaccess文件:
# rewrite engine on and setting up base
RewriteEngine On
RewriteBase /leffa/
# replace + with _
RewriteRule ^(.+?)\+(.+)$ $1-$2 [R=301,L,NE]
# external redirect from action URL to pretty one
RewriteCond %{THE_REQUEST} /index(?:\.php)?\?q=([^\s&]+)&(kuvauksesta)= [NC]
RewriteRule ^ %1/%2? [R=302,L,NE]
RewriteCond %{THE_REQUEST} /index(?:\.php)?\?q=([^\s&]+)\s [NC]
RewriteRule ^ %1? [R=302,L,NE]
# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# internal forward from pretty URL to actual URL (extra parameter)
RewriteRule ^([^/.]+)/([^/.]+)?$ index.php?q=$1&$2=1 [L,QSA]
# internal forward from pretty URL to actual URL
RewriteRule ^(.+)/?$ index.php?q=$1 [L,QSA]
这会将http://www.rollemaa.org/leffa/index.php?q=the+boy等所有网址重写为http://www.rollemaa.org/leffa/the-boy之类的网址。
情况是,我的主文件设置如下:
server {
listen 80;
access_log /var/log/nginx/rollemaa.access.log;
error_log /var/log/nginx/rollemaa.error.log;
root /var/www/rollemaa.org/public_html;
index index.html index.htm index.php;
server_name rollemaa.org www.rollemaa.org;
include hhvm.conf;
include global/wordpress.conf;
# Ensure requests for pagespeed optimized resources go to the pagespeed
# handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
# Static File Caching
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
#location /leffa/ {
#try_files $uri $uri/ /leffa/index.php?q=$args;
#rewrite ^/leffa/(.+?)\+(.+)$ /leffa/$1-$2 redirect;
#rewrite ^/leffa/(.*)$ /leffa/%1/%2? redirect;
#rewrite ^/leffa/(.*)$ /leffa/%1? redirect;
#if (-e $request_filename){
# rewrite ^/leffa/([^/.]+)/([^/.]+)?$ /leffa/index.php?q=$1&$2=1 break;
#}
#rewrite ^/leffa/(.+)/?$ /leffa/index.php?q=$1 break;
#}
}
正如你所看到的,我已经注释掉了重写部分,因为它不起作用。
任何nginx大师都可以帮助我吗?非常感谢提前!
答案 0 :(得分:0)
您可以使用以下重写规则。
location /leffa/ {
index index.php index.html;
rewrite ^/leffa/([^/]*)/?$ /leffa/index.php?q=$1;
}
它会将/ leffa / the-boy /和/ leffa / the-boy等网址重写为/leffa/index.php?q=the-boy。具有子子目录的URL(例如/ leffa / the-boy / something-here)将被忽略。
注意:URL中的+不会转换为空格(就像直接访问/leffa/index.php?q=the+boy时一样)。访问/ leffa / the + boy /将导致查询参数q为" +男孩"。
如果要在查询字符串中使用空格,则必须使用%20 URL编码格式作为空格。 / leffa /%20boy和/ leffa /%20boy /将导致查询参数q为"男孩"。