将每个目录.htaccess(Apache)转换为Nginx

前端之家收集整理的这篇文章主要介绍了将每个目录.htaccess(Apache)转换为Nginx前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的网站以前是在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]

网址类型:

RewriteEngine On
    RewriteBase /genre/

    RewriteRule ^(.+)/$index.PHP?genre=$1 [L]
    RewriteRule ^(.+)/page/(.+)/$index.PHP?genre=$1&page=$2 [L]

标记网址:

RewriteEngine On
RewriteBase /tag/

RewriteRule ^(.+)/$index.PHP?tag=$1 [L]
RewriteRule ^(.+)/page/(.+)/$index.PHP?tag=$1&page=$2 [L]

页面网址:

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;
        }
    }
}

在这里,您可以使用您找到的任何conversion tool的重写规则,但您也可以自己学习如何转换它们,因为语法非常相似:

> Apache的RewriteRule指令:RewriteRule模式替换[flags]
> Nginxrewrite指令:重写正则表达式替换[flag];

替换与替换相同.正则表达式(模式)格式相同.但:

>在Nginx中,您必须包括前导/开头(也是^ /,/ country /等).
>替换也是根相对的,因此您必须包括领先/国家/等.
>你需要;在每条规则行的末尾.

标志有这些等价物:

> [L] – >最后一个内部服务器{}并在内部位置{}.

这部分实际上是至关重要的,因为大多数转换器无法理解上下文差异!

But if these directives are put inside a location,the last
flag should be replaced by break,or otherwise Nginx will
make 10 cycles and return the 500 error.

> [R = 302] – >重定向
> [R = 301] – >常驻

Apache的重写conditions像RewriteCond%{HTTP_HOST} ^ example.com可以在Nginx中用if directives替换: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.WiNginxhtaccess to nginx converter工作得更好.)

猜你在找的Nginx相关文章