web-dev-qa-db-ja.com

変換された.htaccessファイルをNginx構成で使用するにはどうすればよいですか?

ウェブサイトを立ち上げようとして成功しなかったのは約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>

.htaccessfilesディレクトリ内にあるファイル:

<Files *.php>
   Allow from all
</Files>
1
Martin AJ

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バックエンドに送信するか、単にユーザーに送信できるようにします。

免責事項として、ソフトウェア環境がわからないため、これらのルールをテストできません。そのため、これらのルールが要件を満たしていないか、一部で失敗する可能性があります。

0
Tero Kilkanen