将 .htaccess 转换为 nginx,寻求工作解决方案
Convert .htaccess to nginx, seeking working solution
你好,我知道外面有一些 .htaccess2nginx 转换器,好吧,仍然需要一些帮助,因为它根本不工作。
关于我的问题:
在 Nginx 上设置图像板(MyImouto),
Imageboard 使用 .htaccess 从 /srv/domain/public/ 重定向到 /srv/domain/app/...
这是.htaccess:
RewriteEngine On
# Images redirection.
# The following RewriteCond will try to deny any direct linking to images.
# RewriteCond %{HTTP:Referer} ^http://domain/
RewriteRule ^(?:data/)?(preview|sample|jpeg|image)/([0-9a-f]{2})([0-9a-f]{2})([$
# Serve gzipped Stylesheets and Javascripts if mod_headers are enabled.
<IfModule mod_headers.c>
SetEnv no-gzip
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(assets/.*)\.css \.css\.gz [L,ENV=ASSETSCSS:true] [L]
Header set Content-Type text/css env=ASSETSCSS
Header set Content-Encoding gzip env=ASSETSCSS
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(assets/.*)\.js \.js\.gz [L,ENV=ASSETSJS:true] [L]
Header set Content-Type text/javascript env=ASSETSJS
Header set Content-Encoding gzip env=ASSETSJS
</IfModule>
# Redirect to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
用我使用的 3 个转换器之一进行转换甚至都不起作用。
另一个都抛出了这样的东西:
rewrite ^/(?:data/)?(preview|sample|jpeg|image)/([0-9a-f]{2})([0-9a-f]{2})([$ /;
if ( ~ ""){
set $rule_1 1$rule_1;
}
if ($rule_1 = "1"){
rewrite / /;
}
if ( ~ ""){
set $rule_2 1$rule_2;
}
if ($rule_2 = "1"){
rewrite / /;
}
if (!-f $request_filename){
set $rule_3 1$rule_3;
}
if ($rule_3 = "1"){
rewrite /.* /index.php last;
}
但是还是不行。
如果你能帮我解决问题就太好了:)
首先,你要明白这个.htaccess
是做什么的。
除了不完全重写之外,此 .htaccess
尝试提供预压缩资产(file.css.gz
而不是 file.css
)并将对不存在文件的请求重写为 index.php
。
我会这样写:
location / {
try_files $uri $uri/ /index.php;
}
location ^~ /assets/ {
gzip_static on;
}
location ~ \.php$ {
try_files $uri /index.php;
# other PHP fastcgi stuff
}
参考:
你好,我知道外面有一些 .htaccess2nginx 转换器,好吧,仍然需要一些帮助,因为它根本不工作。
关于我的问题: 在 Nginx 上设置图像板(MyImouto), Imageboard 使用 .htaccess 从 /srv/domain/public/ 重定向到 /srv/domain/app/...
这是.htaccess:
RewriteEngine On
# Images redirection.
# The following RewriteCond will try to deny any direct linking to images.
# RewriteCond %{HTTP:Referer} ^http://domain/
RewriteRule ^(?:data/)?(preview|sample|jpeg|image)/([0-9a-f]{2})([0-9a-f]{2})([$
# Serve gzipped Stylesheets and Javascripts if mod_headers are enabled.
<IfModule mod_headers.c>
SetEnv no-gzip
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(assets/.*)\.css \.css\.gz [L,ENV=ASSETSCSS:true] [L]
Header set Content-Type text/css env=ASSETSCSS
Header set Content-Encoding gzip env=ASSETSCSS
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(assets/.*)\.js \.js\.gz [L,ENV=ASSETSJS:true] [L]
Header set Content-Type text/javascript env=ASSETSJS
Header set Content-Encoding gzip env=ASSETSJS
</IfModule>
# Redirect to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
用我使用的 3 个转换器之一进行转换甚至都不起作用。 另一个都抛出了这样的东西:
rewrite ^/(?:data/)?(preview|sample|jpeg|image)/([0-9a-f]{2})([0-9a-f]{2})([$ /;
if ( ~ ""){
set $rule_1 1$rule_1;
}
if ($rule_1 = "1"){
rewrite / /;
}
if ( ~ ""){
set $rule_2 1$rule_2;
}
if ($rule_2 = "1"){
rewrite / /;
}
if (!-f $request_filename){
set $rule_3 1$rule_3;
}
if ($rule_3 = "1"){
rewrite /.* /index.php last;
}
但是还是不行。 如果你能帮我解决问题就太好了:)
首先,你要明白这个.htaccess
是做什么的。
除了不完全重写之外,此 .htaccess
尝试提供预压缩资产(file.css.gz
而不是 file.css
)并将对不存在文件的请求重写为 index.php
。
我会这样写:
location / {
try_files $uri $uri/ /index.php;
}
location ^~ /assets/ {
gzip_static on;
}
location ~ \.php$ {
try_files $uri /index.php;
# other PHP fastcgi stuff
}
参考: