1

次のように 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 の pretty permalinks rewrite ルールと組み合わせて使用​​しようとすると、ルールが破られます。

これは 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 がルートでファイルを検索し、画像ファイルの実際の場所をめちゃくちゃにするためだと思います。

2 つのルールを相互に互換性のあるものにするために、apache で十分に書き換えルールを知っている人はいますか?

ありがとう!

パトリック

4

1 に答える 1

6

これは私のために働いた、

<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

RewriteBase /DPA/ を webp チェックに追加したところ、正常に動作するようになりました。

デフォルトの WordPress プリティ パーマリンク コードが含まれていることに気付きましたが、それはディレクトリ用のものである必要がありました。今すぐ質問を編集します。

于 2014-09-03T13:32:45.230 に答える