如何在不烧坏Wordpress的情况下去除.htaccess中的URL参数

时间:2011-10-28 20:37:28

标签: regex wordpress .htaccess

我试图从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和预览'。

1 个答案:

答案 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]