RewriteBase /wp/
RewriteCond %{query_string} ^token=12345
RewriteRule (.*) /$1? [R=301,L]
但它让我转向:
www.example.com/custom-taxonomy/somepagename
重定向的URL有两个问题:
在/wp
缺少前缀。
缺少尾部斜杠。
修复#1 您可以:
硬编码/wp
替换字符串中的前缀(与上次一样RewriteRule
- WordPress前端控制器的一部分-尽管这可能不正确,但请参阅下一点)。例如:
RewriteRule (.*) /wp/$1? [R=301,L]
自从
RewriteBase /wp
如果已定义,则只需删除替换字符串上的斜杠前缀(使其成为相对路径替换)。ie。
$1?
. mod\\u rewrite然后在
/wp
结果替换的路径段。例如:
RewriteRule (.*) $1? [R=301,L]
旁白:这真的是
RewriteRule
应写入。ie。
RewriteRule . index.php [L]
(因为这就是
RewriteBase /wp
首先定义)。
更改规则以使用REQUEST_URI
服务器变量而不是反向引用($1
). 这个REQUEST_URI
包含完整的根相对URL路径,因此已包含/wp
前缀这可能是首选方法(除非有其他要求),因为它可以在任何地方工作,并且不依赖于RewriteBase
. 例如:
RewriteRule ^ %{REQUEST_URI}? [R=301,L]
然而,这并不能解决
#2 - 缺少的尾部斜杠。这不是由该指令引起的-其他原因是删除了尾部斜杠(如果它在初始请求中存在的话)。一个可能的原因是中建议的permalink结构
@IXN\'s answer. 如果尾部斜杠是初始请求的一部分(如问题中所示),则此指令会专门保留它。如果初始请求中缺少尾部斜杠,则重定向响应中也将缺少尾部斜杠(有关如何修复此问题,请参见下文)。为了进一步调试,您应该检查网络流量中是否有任何其他重定向。
Additional notes:
<您应该避免在
# BEGIN WordPress
部分,因为WordPress将尝试维护此内容并覆盖您的编辑。此重定向应位于
.htaccess
文件,在
# BEGIN WordPress
部分
^token=12345
- 包括一个和的字符串锚($
) 仅匹配此查询字符串。就目前情况而言,它匹配任何仅以开头的查询字符串token=12345
.在Apache 2.4上使用QSD
(查询字符串丢弃)标志,而不是附加空查询字符串(单独?
) 在替换字符串上。
目前,此规则与任何URL路径匹配。包括所有静态资源(图像、CSS、JS)等。它并不特别匹配/wp/<custom-taxonomy>/<somepagename>/
- 所述的URL格式。理想情况下,您的规则应该尽可能具体,只匹配目标URL,以避免不必要的重定向和额外的规则处理。例如:
RewriteRule ^[\\w-]+/[\\w-]+/$ %{REQUEST_URI} [QSD,R=301,L]
The\\w
速记字符类与字符匹配a-z
, A-Z
, 0-9
和_
(下划线)因此很自然地避免了匹配静态资源,这些资源通常具有以点为前缀的文件扩展名。要匹配初始请求上的可选尾部斜杠,但始终在重定向URL上包含尾部斜杠,则可以执行以下操作:
# Trailing slash optional on request and slash always appended
# (Dependent on RewriteBase)
RewriteRule ^([\\w-]+/[\\w-]+)/?$ $1/ [QSD,R=301,L]
然而,这现在取决于RewriteBase
指令(获取目录前缀),如上所述。尽管您可以使用条件(RewriteCond
指令)删除对RewriteBase
. 例如:# Trailing slash optional on request and slash always appended
# (Not dependent on RewriteBase)
RewriteCond %{REQUEST_URI} (.*?)/?$
RewriteRule ^([\\w-]+/[\\w-]+)/?$ %1/ [QSD,R=301,L]
始终使用302(临时)重定向进行测试,以避免潜在的缓存问题(浏览器持久缓存301s,包括错误的重定向)。测试前清除浏览器缓存。总而言之
# Trailing slash optional on request and slash always appended
# Full URL-path used, including subdirectory preifx
# Not dependent on RewriteBase
RewriteCond %{QUERY_STRING} ^token=12345$ [NC]
RewriteCond %{REQUEST_URI} (.*?)/?$
RewriteRule ^([\\w-]+/[\\w-]+)/?$ %1/ [QSD,R=301,L]
# BEGIN WordPress
: