我有一个 WordPress 插件和主题,它们对外部 css 文件的 URL 调用有误。我稍后会解决这个问题,但在那之前,我需要做一个重定向,以便正确地提供 css。
REQUEST_URI 包含完整路径,为什么这不起作用?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/?wp-content/plugins/jetpack/css/%22https:/fonts.googleapis.com/css?family=Open+Sans%22$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/?wp-content/plugins/jetpack/css/"https:/fonts.googleapis.com/css?family=Open+Sans"$
RewriteRule ^(.*)$ https://fonts.googleapis.com/css?family=Open+Sans [R,L]
</IfModule>
注意 1:我在 RewriteCond 中尝试了几种转义字符的组合。没有任何效果。 注意 2:我使用标志 [R,L] 进行测试,以防止浏览器缓存。稍后将更改为 [R=301,L]。 注意 3:我已经测试验证问题出在 RewriteCond,而不是 RewriteRule。
更新:
好的,所以这是一个糟糕的问题,也是一个愚蠢的错误。即使原始 REQUEST_URI 包含查询字符串,mod_rewrite 也明确不允许查询字符串在 REQUEST_URI 中用于匹配目的。因此,改为使用 QUERY_STRING。我认为这可以通过任何一种方式完成。
我的 REQUEST_URI 中没有真正的查询字符串——我的查询字符串位于我想要匹配的字符串中——这就是我一开始没有去 QUERY_STRING 的原因。但 mod_rewrite 仍将?
视为典型的查询字符串开始。
对不起大家。我可以这样处理它,直到我解决了 WordPress 中的潜在问题:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/?wp-content/plugins/jetpack/css/%22https:/fonts.googleapis.com/css(.*)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/?wp-content/plugins/jetpack/css/"https:/fonts.googleapis.com/css(.*)$
RewriteRule ^(.*)$ https://fonts.googleapis.com/css?family=Open+Sans [R,L]
</IfModule>
使用 WordPress,请始终记住将您的重写置于 WordPress 重写之上。