2012-09-13 105 views
0

需要帮助将.htaccess重写规则转换为nginx配置。规则来自metro缩小网址缩写脚本。.htaccess重写为nginx配置

RewriteEngine On 
#RewriteBase/

RewriteRule ^developer.html$   developer.php [QSA,L] 
RewriteRule ^multishrink.html$   multishrink.php [QSA,L] 
RewriteRule ^stats.html$    public-stats.php [QSA,L] 
RewriteRule ^feed.rss     feed.php [QSA,L] 
RewriteRule ^([^/]+)\.qrcode$   qrcode.php?id=$1 [QSA,L] 
RewriteRule ^api.php$     API/simple.php [QSA,L] 
RewriteRule ^API/write/(get|post)$  API/write.php?method=$1 [QSA,L] 
RewriteRule ^API/read/(get|post)$  API/read.php?method=$1 [QSA,L] 
RewriteRule ^([^/]+)/stats$    stats.php?id=$1 [QSA,L] 
RewriteRule ^([^/]+)/unlock$   unlock.php?id=$1 [QSA,L] 

# If path is not a directory or file then apply RewriteRule 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteRule ^([0-9a-zA-Z-]{1,60})$  go.php?id=$1 [QSA,L] 

回答

0

以下应该做的伎俩:

location = /developer.html { rewrite^developer.php last; } 
location = /multishrink.html { rewrite^multishrink.php last; } 
location = /stats.html { rewrite^stats.php last; } 

location ~ ^feed.rss { rewrite^feed.php last; } 
location ~ ^([^/]+)\.qrcode$ { rewrite ^([^/]+)\.qrcode$ qrcode.php?id=$1 last; } 

location = /api.php { rewrite^API/simple.php; } 
location ~ ^API/(write|read)/(get|post)$ { 
    rewrite ^API/(write|read)/(get|post)$ API/$1.php?method=$2 last;  
} 

location ~ ^([^/]+)/stats$ { rewrite ^([^/]+)/stats$ stats.php?id=$id last;} 

location ~ ^([^/]+)/unlock$ { 
    set $id $1; 
    rewrite^unlock.php?id=$id last; 
} 

location ~ "^([0-9a-zA-Z-]{1,60})$" { 
    try_files $uri $uri/ go.php?id=$1; 
} 

注意:您可以先救他们再利用从位置的正则表达式的捕获(如在解锁位置),或者您可以重复正则表达式(需要保存来自重写指令重置捕获变量的事实)。使用你喜欢的任何风格。

注:Nginx是由Apache的默认设置,以便QSA标志追加查询参数基本上是默认的,从:

If a replacement string includes the new request arguments, the previous request 
arguments are appended after them. If this is undesired, putting a question mark 
at the end of a replacement string avoids having them appended 
+0

感谢回复,但我得到了两个错误1)无效参数“= 404”2)在“设置”指令 – user1624300

+0

另一个错误[emerg] pcre_compile()失败失踪)中的参数无效“^([0-9a-zA- Z-]“ – user1624300

+0

pcre_compile是因为正则表达式涉及的大括号也用于划分块,所以正则表达式必须被引用。在我的回答 – cobaco

0

尝试:

location = /developer.html { 
    rewrite ^(.*)$ /developer.php break; 
} 

location = /multishrink.html { 
    rewrite ^(.*)$ /multishrink.php break; 
} 

location = /stats.html { 
    rewrite ^(.*)$ /public-stats.php break; 
} 

location /feed { 
    rewrite ^/feed.rss /feed.php break; 
} 

location/{ 
    rewrite ^/([^/]+)\.qrcode$ /qrcode.php?id=$1 break; 
    rewrite ^/([^/]+)/stats$ /stats.php?id=$1 break; 
    rewrite ^/([^/]+)/unlock$ /unlock.php?id=$1 break; 
    if (!-e $request_filename){ 
     rewrite "^/([0-9a-zA-Z-]{1,60})$" /go.php?id=$1 break; 
    } 
} 

location = /api.php { 
    rewrite ^(.*)$ /API/simple.php break; 
} 

location /API { 
    rewrite ^/API/write/(get|post)$ /API/write.php?method=$1 break; 
    rewrite ^/API/read/(get|post)$ /API/read.php?method=$1 break; 
} 
+1

感谢得到它的工作后,我改变所有的“破发”到“最后” – user1624300