私の質問はSetEnvIf
、環境変数の使用と、必要に応じて環境変数を正しく使用する方法に関連しています。私が何をする必要があるか、そして私がすでに持っていることを説明します...
一部の書き換えルールではそのディレクトリ名が使用されているため、htaccessファイルでphpアプリケーションディレクトリを設定する必要があります。管理ユーザーがこのディレクトリ名を変更できるようにしようとしています。これは現在phpで設定されており、変更はhtaccessファイルで手動で行い、次にphpで再度行います。これを達成するために、私は現在次のことをしています(リライトルールでのenv変数の使用に関するアドバイスを受けています)
SetEnvIf SERVER_PROTOCOL ".*" APP_DIR=application
SetEnv
これは、リライトルールの後に処理されるのに対し、リライトルールの前に処理されるように、リライトルールの前にenvvarセットを取得するように設定されていますSetEnvIf
。
これで、リライト条件とリライトルールの2番目の部分をAPP_DIR
使用してアクセスできます。%{ENV:APP_DIR}
アプリケーションディレクトリが存在しないため、私が達成する必要があるのはそれよりも少し複雑ですが、PHPアプリケーションにフロントエンドではなくバックエンドとして処理することを知らせるためのリダイレクトです。現在(env varなしで)書き換えは
### ADMIN REWRITE
RewriteRule ^application\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^application(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L]
### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L]
したがって、おそらくおわかりのように、システムの管理者がパスを変更できるようにするapplication
ために、代わりに使用できるようにする必要があります。APP_DIR
cms
admin
悲しいことに、以下は機能しません
### ADMIN REWRITE
RewriteRule ^%{ENV:APP_DIR}\/?$ index.php?mode=administration&%{QUERY_STRING} [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^%{ENV:APP_DIR}(\/(.*\/?))?$ index.php?page=$1&mode=administration&%{QUERY_STRING} [NC,L]
### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ index.php?page=$1&%{QUERY_STRING} [L]
%{ENV:APP_DIR}
正規表現はリライトの前に処理されるため、リライトの正規表現では使用できません。また、env変数も使用できません。
誰かが私が必要なことを達成したことがありますか?書き換えロジックを多少調整することを意味する場合でも、それを行うことはできますか?書き換え後のphpロジックは変更できないことを述べなければなりません。これは、古いシステムであり、下位互換性の問題が発生した場合に発生するためです。