私のサイトは以前はApacheサーバー上にありました。これはカスタムPHPサイトで、ほぼすべてのフォルダーに.htaccess
があります。メインディレクトリの.htaccess
の一部を取得して、Nginxで動作させることができましたが、私はディレクトリごとの.htaccess
ディレクティブで同じことを行うことができませんでした。
.htaccess
ファイルの一部を次に示します。
メイン.htaccess
:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^search(.+)/$ search.php?search=$1 [L]
RewriteRule ^search(.+)/page/(.+)/$ search.php?search=$1&page=$2 [L]
RewriteRule ^nonton/(.+)/$ download.php?download=$1 [L]
RewriteRule ^nonton/(.+)/(.+)/$ download.php?download=$1&size=$2 [L]
RewriteRule ^get/(.+)/$ get_dl.php?dl=$1 [L]
RewriteRule ^(.+)-live-streaming/$ tv.php?tv=$1 [L]
RewriteRule ^thumb/(.+)$ data/thumb.php?i=$1 [L]
RewriteRule ^sitemap.xml$ sitemap.php [L]
Options -Indexes
国別のURL:
RewriteEngine On
RewriteBase /country/
RewriteRule ^(.+)/$ index.php?country=$1 [L]
RewriteRule ^(.+)/page/(.+)/$ index.php?country=$1&page=$2 [L]
ジャンル別URL:
RewriteEngine On
RewriteBase /genre/
RewriteRule ^(.+)/$ index.php?genre=$1 [L]
RewriteRule ^(.+)/page/(.+)/$ index.php?genre=$1&page=$2 [L]
タグのURL:
RewriteEngine On
RewriteBase /tag/
RewriteRule ^(.+)/$ index.php?tag=$1 [L]
RewriteRule ^(.+)/page/(.+)/$ index.php?tag=$1&page=$2 [L]
ページURL:
RewriteEngine On
RewriteBase /title/
RewriteRule ^page/(.+)/$ index.php?page=$1 [L]
オンラインの.htaccess
からNginxへのコンバーターを試しましたが、失敗したようです。誰かがこの.htaccess
をNginxに変換するのを手伝ってくれませんか?
ここでの主な問題は、ルールの変換ではなく、どこでルールを使用すべきかを理解することだと思います。ディレクトリごと_.htaccess
_ context はApache HTTPD固有の機能であり、Nginxはこの種の動作をサポートしていません。
Nginxに相当するものは、_nginx.conf
_の location
ディレクティブです。例:.
_http {
. . .
server {
. . .
location /country/ {
rewrite ^/country/(.+)/$ /country/index.php?country=$1 break;
rewrite ^/country/(.+)/page/(.+)/$ /country/index.php?country=$1&page=$2 break;
}
location /genre/ {
rewrite ^/genre/(.+)/$ /genre/index.php?genre=$1 break;
rewrite ^/genre/(.+)/page/(.+)/$ /genre/index.php?genre=$1&page=$2 break;
}
}
}
_
ここでは、見つけた任意の 変換ツール からrewrite
ルールを使用できますが、構文がであるため、自分で変換する方法を学ぶこともできます。 )非常に類似:
RewriteRule
ディレクティブ:_RewriteRule Pattern Substitution [flags]
_rewrite
ディレクティブ:_rewrite regex replacement [flag];
_置換は置換と同じです。正規表現(パターン)の形式は同じです。だが:
/
_を先頭に含める必要があります(_^/
_、_/country/
_なども)。/country/
_などを含める必要があります。;
_が必要です。フラグには次の同等物があります。
_[L]
_-> last
内部_server {}
_およびbreak
内部_location {}
_。
ほとんどのコンバーターはコンテキストの違いを理解できないため、この部分は実際には非常に重要です。
ただし、これらのディレクティブが
location
内に配置されている場合は、last
フラグをbreak
に置き換える必要があります。そうしないと、nginxは10サイクルを実行し、500エラーを返します。
_[R=302]
_-> redirect
[R=301]
_-> permanent
Apacheの書き換え conditions like _RewriteCond %{HTTP_Host} ^example.com
_は、Nginxで if
ディレクティブ :if ($http_Host ~ "^example.com") { }
に置き換えることができます。例:.
_ location / {
if ($http_Host ~ "^example.com"){
rewrite ^(.*)$ http://www.example.com/$1 redirect;
}
rewrite ^/(.+)-live-streaming/$ /tv.php?tv=$1 break;
}
_
リンクされたマニュアルを読み、教育目的で変換ツールを使用することで、残りのことを学ぶことができます。 (私は以前にリンクしました Apache2nginx ルート相対性理論を処理できず、break
の代わりにlast
を使用する変換ツール。Winginxの htaccessからnginxへのコンバーター うまく機能します。)