【问题标题】:htaccess Server-side WEBP detection in conjunction with WordPress htaccess ruleshtaccess 服务器端 WEBP 检测结合 WordPress htaccess 规则
【发布时间】:2014-10-28 00:01:04
【问题描述】:

我的 htaccess 文件设置如下:

<IfModule mod_rewrite.c>
  RewriteEngine On
  # check if browser accepts webp
  RewriteCond %{HTTP_ACCEPT} image/webp 

  # check if file is jpg or png
  RewriteCond %{REQUEST_FILENAME} (.*)\.(jpe?g|png)$

  # check if corresponding webp file exists image.png -> image.webp
  RewriteCond %1\.webp -f

  # serve up webp instead
  RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]

</IfModule>

<IfModule mod_headers.c>
  Header append Vary Accept env=REDIRECT_accept
</IfModule>

AddType image/webp .webp

这在测试目录中工作得非常好,如果存在则显示 webp 图像。但是,当我尝试将相同的 .htaccess 规则与 WordPress 的漂亮永久链接重写规则结合使用时,这些规则就会中断。

这是 WordPress 的默认规则(如果您的子目录称为 DPA)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /DPA/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /DPA/index.php [L]
</IfModule>

如果我尝试直接访问 jpg 文件,我会在服务器上收到以下错误:

The requested URL /wp-content/themes/dpa/assets/img/home-page/sliders/strategy-1650.webp was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

我想这是因为 WordPress 在根目录中查找文件并弄乱了图像文件的实际位置。

有人知道在 apache 上重写规则足以使这两个规则相互兼容吗?

谢谢!

帕特里克

【问题讨论】:

  • 您的规则是在 WordPress 之上还是之下?我通常将 WordPress 的规则一直保留在底部。另外,您是否尝试将“最后一条规则”标志L 添加到您的重写中? [T=image/webp,E=accept:1,L]
  • 我在上面和下面都试过了,但似乎没有什么不同。我现在就试试那个 L 标志
  • 尝试以上方法和L,这样它就会首先启动,而 WordPress 根本不会参与其中。
  • 不抱歉,它仍然没有得到文件。无论是在 wordpress 块的上方还是下方都没有区别,我将 RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1] 更改为 RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1,L]
  • 嗯...我刚刚尝试过,您的规则对我来说非常适用。您能否发布导致上述错误的 JPG 的路径,以便我们查看它是如何被破坏的?

标签: wordpress apache .htaccess mod-rewrite webp


【解决方案1】:

这对我有用,

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /DPA/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /DPA/index.php [L]
</IfModule>

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /DPA/
  # check if browser accepts webp
  RewriteCond %{HTTP_ACCEPT} image/webp 

  # check if file is jpg or png
  RewriteCond %{REQUEST_FILENAME} (.*)\.(jpe?g|png)$

  # check if corresponding webp file exists image.png -> image.webp
  RewriteCond %1\.webp -f

  # serve up webp instead
  RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]

</IfModule>

<IfModule mod_headers.c>
  Header append Vary Accept env=REDIRECT_accept
</IfModule>

AddType image/webp .webp

我在 webp 检查中添加了 RewriteBase /DPA/,现在它可以正常工作了。

我刚刚意识到我包含了默认的 WordPress 漂亮永久链接代码,但它应该是用于目录的代码。我现在将编辑问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多