web-dev-qa-db-ja.com

サーバーに依存しない外部書き換え規則を追加する方法

外部書き換え規則は素晴らしいです。それらはあなたが必ずしもWordPressのindex.phpを通過しないという書き換えを定義することを可能にします。これは、あなたが任意のルールを任意のファイルにマッピングできることを意味します。

$wp_rewrite->add_external_rule( '^somethingrandom/?$', 'wp-content/wp-uploads/hiddendirectory/somefile.php' );

それから、http://site.url/somethingrandom/へのどんな要求でも実際には別のディレクトリから静的PHPファイルに提供されます。これは素晴らしいです、そしてそれはあなたがいろいろな種類の気の利いたことをすることを可能にします。

しかし、それはApacheでしか動作しません。

add_external_rule()メソッドは、登録されている規則を.htaccessに書き出します。 Nginxは.htaccessファイルを使用しないので、外部の規則はそのサーバーによって完全に無視されます。私が必要としているのは、上記のようなプログラム的に規則を登録するためのサーバーに依存しない方法です。何か案は?

6
EAMann

これは、.htaccessファイルがApacheで有効になっていることも前提としています。これは、ほとんどの場合、共有ホスティングにありますが、エンタープライズ環境では無効になっていることが多いです。これを実現するための1つの方法は、リダイレクトをファイルに書き出す独自のadd_external_nginx_rule関数を書くことです(混乱を招く可能性がありますが、.htaccessを使用することもできます。 Nginxサーバーブロックで

include /var/www/html/sitefolder/.htaccess;

あなたの関数では、リダイレクトをNginxフォーマットで書き出すでしょう。それは多くの場合Apacheフォーマットとほとんど同じです。これはおそらくあなたがプラグインにさえ変えることができるものです。 Nginxの設定ファイルに特別な設定が必要ですが、Apacheで.htaccessを使用するには、Apacheの設定ファイルでも有効にする必要があるので、同じ概念であると主張できます。

注:私はこれを試したことはありませんが、これがうまくいかない理由はありません。検討する価値があるでしょう。

更新:マークはコメントの中で正しい - Nginxは最初の起動時または再ロード時に設定ファイルを読むだけなのでこれはうまくいかないだろう、それであなたはNginxを変更して再起動する必要がある。

4
TheLastCicada