2

我有一个 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 重写之上。

4

0 回答 0