加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

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

发布时间:2020-12-13 21:10:42 所属栏目:Nginx 来源:网络整理
导读:我的网站以前是在Apache服务器上.这是一个自定义的PHP站点,几乎每个文件夹都有.htaccess.我已经设法获得主目录上的.htaccess的一部分来处理Nginx,但是我无法对每个目录的.htaccess指令做同样的事情. 以下是一些.htaccess文件: 主要.htaccess: RewriteEngin

我的网站以前是在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]
> Nginx的rewrite指令:重写正则表达式替换[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.Winginx的htaccess to nginx converter工作得更好.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读