ウェブサイトを立ち上げようとして成功しなかったのは約5日です。問題は、ローカルでApacheを使用していて、Webサイトがローカルで正常に機能し、サーバーがnginxを使用していて、nginx構成内で.htaccess変換を使用できないことです。
これが私のウェブサイト構造の簡略化です:
/mywebsite
/application
/files
file1.php
.htaccess
/public
/css
/js
.htaccess
見る? 2つの.htaccess
ファイルがあります。 1つはルートにあり、もう1つはfiles
ディレクトリ内にあります。ローカルホストでApacheを使用しているので、すべてローカルホストで機能します。次に、nginxを使用するサーバーで動作させる必要があります。
このウェブサイト を使用してhtaccessファイルのコンテンツをnginx-configurationに変換します。
まず、変換結果をどのファイルに貼り付ける必要がありますか? (nginx構成ファイルはどこにありますか?/etc/nginx/nginx.conf
?)
そして、これら2つの.htaccess
ファイルをどのように処理できますか? 2つのnginxファイルも作成する必要がありますか?
.htaccess
ファイルのルート:
RewriteEngine on
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]
ErrorDocument 404 /error404.html
Options -Indexes
<Files *.php>
Order Deny,Allow
Deny from all
Allow from ::1
</Files>
<Files index.php>
Order Allow,Deny
Allow from all
</Files>
.htaccess
files
ディレクトリ内にあるファイル:
<Files *.php>
Allow from all
</Files>
Nginxでは、すべてのサイト固有の構成が1つのserver
ブロックに含まれ、location
ブロックは特定のURLに異なる構成ディレクティブを追加するために使用されます。
全体として、哲学はApache2とはかなり異なるため、同様の構成を行う方法を理解するには、それを研究する必要があります。
あなたの場合、nginx構成ディレクティブは次のようになります。
location / {
try_files $uri $uri/ /index.php?rt=$request_uri;
}
location ~ \.php$ {
deny all;
}
location ^~ /index.php {
# include here the configuration items from nginx default location ~ \.php$ block
}
location ^~ /files {
# include here either PHP configuration directives from location ~ \.php$ block if you want PHP scripts executed from here. If you do not want PHP scripts to be executed, then use
allow all;
}
これらのディレクティブは、メインのnginx構成、または/etc/nginx/sites-available
ディレクトリの下に存在するサイト固有の構成のいずれかに含まれています。
ブロックに関するいくつかの説明:
最初のlocation
ブロックは、nginxでの標準のフロントコントローラーパターンの実装です。これは、nginxが最初に必要なファイルがサーバーのどこかにあるかどうかをチェックし、存在する場合はサーバーにあることを意味します。それ以外の場合は、元のリクエストURI部分を引数としてindex.php
に、リクエストを?rt
に送信します。正規表現を使用して引数として渡される可能性のあるURIを制限するため、これは実装とは少し異なります。
2番目のlocation
ブロックは、.php $で終わるすべてのURIへのアクセスを拒否します。
3番目のブロックは、index.php
の例外を追加します。これは、PHPバックエンドを使用して処理されます。
4番目のブロックは、PHPスクリプト要求をPHPバックエンドに送信するか、単にユーザーに送信できるようにします。
免責事項として、ソフトウェア環境がわからないため、これらのルールをテストできません。そのため、これらのルールが要件を満たしていないか、一部で失敗する可能性があります。