转换htaccess到nginx

我没有运气将htaccess规则转换为nginx重写。 我已经检查了NginxRewriteModule文档,并完成了一些,但更多的复杂的我不知所措。 这就是我正在看的:

RewriteRule ^$ /cgi-bin/index.cgi [L] RewriteRule ([0-9A-Za-z]{12})-del-([0-9A-Za-z]+)/.+$ /cgi-bin/index.cgi?del=$1-$2 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([0-9A-Za-z]{12})(\.html?|$)$ /cgi-bin/index.cgi?op=download1&id=$1 [L] RewriteRule ^([0-9A-Za-z]{12})(\/.+|\.html?|$) /cgi-bin/index.cgi?op=download1&id=$1&fname=$2 [L] RewriteRule ^([0-9A-Za-z\-_]{4,64})/([0-9A-Za-z]{12})$ /cgi-bin/index.cgi?op=download1&usr_login=$1&id=$2 [L] RewriteRule ^([0-9A-Za-z\-_]{4,64})/([0-9A-Za-z]{12})(\/.+|\.html?|$) /cgi-bin/index.cgi?op=download1&usr_login=$1&id=$2&fname=$3 [L] #RewriteRule ^Reseller\.html$ /cgi-bin/Templates/Pages/english/Reseller.html [L] RewriteRule ^checkfiles\.html$ /cgi-bin/index.cgi?op=checkfiles [L] RewriteRule ^contact\.html$ /cgi-bin/index.cgi?op=contact [L] RewriteRule ^premium\.html$ /cgi-bin/index.cgi?op=payments [L] RewriteRule ^login\.html$ /cgi-bin/index.cgi?op=login [L] RewriteRule ^catalogue(.*)\.html$ /cgi-bin/index.cgi?op=catalogue&date=$1 [L] RewriteRule ^news([0-9]*)\.html$ /cgi-bin/index.cgi?op=news&page=$1 [L] RewriteRule ^n([0-9]+)-.*\.html$ /cgi-bin/index.cgi?op=news_details&news_id=$1 [L] RewriteRule ^free([0-9]+)\.html$ /cgi-bin/index.cgi?op=registration&aff_id=$1 [L] RewriteRule ^users/([0-9A-Za-z\-_]{4,64})/?([0-9]+|$) /cgi-bin/index.cgi?op=user_public&usr_login=$1&fld_id=$2 [L,NC] RewriteRule ^embedmp3-([0-9A-Za-z]{12})\.html$ /cgi-bin/index.cgi?op=mp3_embed&file_code=$1 [L] RewriteRule ^embedmp4-([0-9A-Za-z]{12})\.html$ /cgi-bin/index.cgi?op=mp32_embed&file_code=$1 [L] RewriteRule ^box$ /cgi-bin/index_box.cgi [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z\-_]{4,64})(/[^\/]*/?|$)$ /cgi-bin/index.cgi?op=user_public&usr_login=$1&fld=$2 [L,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([a-z0-9\-\_]+).html(.*) /cgi-bin/index.cgi?op=page&tmpl=$1$2 [L] 

将Apache .htaccess翻译成Nginx重写工具的在线工具包括:

请注意,这些工具将使用if语句转换为等效的重写表达式 ,但它们应该转换为try_files 。 看到:

重写规则与nginx的写法大致相同: http : //wiki.nginx.org/HttpRewritemodulee#rewrite

哪些规则正在给你造成麻烦? 我可以帮你翻译这些!

还没有测试,但看起来比亚历克斯提到的要好。

winginx.com/en/htaccess的说明如下 :

关于nginx转换器的htaccess

该服务是将Apache的.htaccess转换为nginx配置说明。

首先,这个服务被认为是一个mod_rewrite到nginx的转换器。 但是,它允许你转换一些其他有理由从Apache移植到nginx的指令。

注意服务器指令(例如php_value等)将被忽略。

转换器不检查语法,包括正则表达式和逻辑错误。

请在使用前手动检查结果。

使用这个: http : //winginx.com/htaccess

在线转换器,不错的方式和节省时间;)

你可以很容易地使一个PHP脚本来解析你的旧htaccess,我用这个PRestashop规则:

$ content = $ _POST ['content'];

  $lines = explode(PHP_EOL, $content); $results = ''; foreach($lines as $line) { $items = explode(' ', $line); $q = str_replace("^", "^/", $items[1]); if (substr($q, strlen($q) - 1) !== '$') $q .= '$'; $buffer = 'rewrite "'.$q.'" "'.$items[2].'" last;'; $results .= $buffer.PHP_EOL; } die($results);