我有一个htaccess文件,我正在尝试将其转换为nignx配置文件。
这是我的htaccess文件。
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule !\.(jpg|css|js|gif|png)$ public/ [L]
RewriteRule !\.(jpg|css|js|gif|png)$ public/index.php?url=$1
我的nginx配置文件中的规则:
location / {
if ($request_uri !~ "-f"){
rewrite !\.(jpg|css|js|gif|png)$ public/ break;
}
rewrite !\.(jpg|css|js|gif|png)$ public/index.php?url=$1;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
# Move to the @missing part when the file doesn't exist
try_files $uri @missing;
# Fix for server variables that behave differently under nginx/$
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with ngingx
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
# Pass to upstream PHP-FPM; This must match whater you name you$
#fastcgi_pass phpfpm;
fastcgi_pass 127.0.0.1:9000;
}
location @missing {
rewrite ^(.*)$ public/index.php?url=$1 break;
}
然而,当我点击/时,我得到403 Forbidden,但是我可以到/public/index.php,因此重写不起作用。
关于我做错的任何想法?
答案 0 :(得分:0)
你的if ($request_uri !~ "-f")
- 语句没有按照你想要的方式在nginx中进行解析。你没有检查文件是否存在,而是针对否定的正则表达式-f
进行加工。要在if in nginx中检查文件是否存在,请使用if ( -f $request_filename )
有关nginx if
语句的详细信息,请参阅http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
通常,您想要替换常见的.htaccess节:
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule <regex> <target>
与nginx等价物:
location ~* <regex> { try_files $uri $uri/ <target>;}
对于您声明的位,您将获得如下嵌套位置:
location / {
location ~* \.(jpg|css|js|gif|png)$ { try_files $uri $uri/ /public/; }
location !~* (.*)\.(jpg|css|js|gif|png)$ {
try_files $uri $uri/ /public/index.php?url=$1;
}
}