我正在尝试将我的网站从默认/年/月/日/ post_title永久链接更改为简单/ post_title /链接,但是,在更改它时,我的所有旧链接都已损坏。我已经阅读了一个关于如何使用.htaccess在Apache上执行此操作的网站,但需要一些帮助来确定如何使用nginx的位置而不是mod_rewrite。
这是详细说明如何在Apache http://www.rickbeckman.org/how-to-update-your-wordpress-permalinks-without-causing-link-rot/上执行此操作的网站
我尝试将此htaccess用于nginx转换器http://winginx.com/htaccess但是,正则表达式可能会导致问题,并且在启动nginx时出现此错误
[emerg]: unknown directive "4}/[0-9]" in /usr/local/nginx/sites-enabled/website.com:19
这是我的配置文件
server {
listen 80;
server_name website.com;
rewrite ^/(.*) http://www.website.com/$1 permanent;
}
server {
listen 80;
server_name www.website.com;
error_log /home/user/public_html/website.com/log/error.log;
client_max_body_size 10M;
client_body_buffer_size 128k;
location / {
root /home/user/public_html/website.com/public/;
index index.php index.html;
try_files $uri $uri/ /index.php;
}
location ~ ^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\-/]+) {
rewrite ^(.*)$ http://website.com/$1 permanent;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$
{
fastcgi_read_timeout 120;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /usr/local/nginx/conf/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /home/user/public_html/website.com/public/$fastcgi_script_name;
}
}
有人知道如何修复它吗?感谢。
答案 0 :(得分:0)
修复很简单:
location ~ ^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\-/]+) {
rewrite ^(.*)$ http://website.com/$1 permanent;
}
上述问题是重写会重置反向引用,因此$ 1现在匹配重写匹配的整个url,而不是位置匹配的$ 1。 以下应该有效:
location ~ ^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\-/]+) {
set $post_title $1;
rewrite ^(.*)$ http://website.com/$post_title permanent;
}
(或者再次匹配重写规则中的正则表达式)
答案 1 :(得分:0)
通过在正则表达式周围添加引号来修复它。
rewrite "^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([a-z0-9\-/]+)" http://www.website.com/$1;