我试图从Wordpress友好的URL中删除无关的参数,例如:
/foo-post-name.html?sf123456=1
我已将以下指令添加到.htaccess
RewriteRule ^(?!wp-admin))(.*)$ $1? [R=301,L]
这确保除了/ wp-admin之外的任何URL都会剥离URL parms。但是,我刚才意识到我还需要从URL参数strippage中排除/?p = 12345& preview = true等网址。
我已经尝试将其更改为:
RewriteRule ^(?!wp-admin|p=))(.*)$ $1? [R=301,L]
...但这不起作用(500服务器错误)。我应该如何修改我的正则表达式,以便不重定向/?p = 1234?
我需要支持的唯一参数是'p和预览'。
答案 0 :(得分:1)
您无法在RewriteRule中与查询字符串匹配,但您可以在RewriteCond中使用*%{QUERY_STRING} *。这有点乱,但这是你想要做的吗?
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{QUERY_STRING} ^p=([0-9]+)
RewriteCond %{QUERY_STRING} !preview=true
RewriteRule (.*) /$1?p=%1 [L,R=301]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{QUERY_STRING} ^p=([0-9]+)
RewriteCond %{QUERY_STRING} preview=true
RewriteRule (.*) /$1?p=%1\&preview=true [L,R=301]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{QUERY_STRING} !^p=[0-9]+
RewriteCond %{QUERY_STRING} preview=true
RewriteRule (.*) /$1?preview=true [L,R=301]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteRule (.*) /$1? [L,R=301]