需要帮助将.htaccess重写规则转换为nginx配置。规则来自metro shrink url shortner script。
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 :(得分: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 :(得分: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标志基本上是默认值,来自http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite:
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