技术解析

apache 重写怎么转 nginx
0
2021-05-26 15:21:59
idczone

RewriteCond %{THE_REQUEST}抗投诉服务器 ^GET\s.+.php [NC]
RewriteRule ^(.+).php$ /$1 [NE,R=301,L,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

在线转换工具不管用啊


大神给看看

http://90r.org/628.html 试下里面的网站,我试过还可以的

虽然我第一个使用的HTTP Server是Apache,但我开始自己写rewrite却不是Apache,而是Nginx,因此对mod_rewrite的语法不太了解。
也许你可以尝试说明用途(预期效果),而不是给mod_rewrite的规则,说不定别人更容易帮到你。

用途是去掉网站.php后缀 比如http://www.baidu.com/login.php重写后改成http://www.baidu.com/login/

有利于seo

不修改网站源代码的前提下

http://www.baidu.com/login.php?logout 重写成http://www.baidu.com/login/?logout

写错应该是http://www.baidu.com/login.php?logout 重写成http://www.baidu.com/login?logout

if ($request_filename ~ "(.*)\.php") {
rewrite ^/(.*)\.php$ http://www.hwbj.net/$1 permanent;
}
if ($request_filename !~ "(.*)\.php") {
rewrite ^/(.*)$ /$1.php last;
}


试试这个:
rewrite ^/(.*)\.php$ /$1 permanent;
if (!-f $request_filename){
set $rule_0 1$rule_0;
}
if (!-d $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^/.*$ $fastcgi_script_name.php?$query_string last;
}

刚刚测试了一下,发现一点问题,这个是完善的版本:
rewrite "^/(.*)\.php(/){0,}$" /$1 permanent;
if (!-f $request_filename){
set $rule_0 1$rule_0;
}
if (!-d $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^/.*$ $fastcgi_script_name.php last;
}



诸位,if is evil,各种nginx文档里都已经强调过无数次了
http://wiki.nginx.org/IfIsEvil

location ~ (.+)\.php$ {
return 301 $1;
}
location / {
try_files ${uri}.php =404;
}

Amazing!

一直不是很懂try_files怎么用,看来要去好好学学了。谢谢@

try_files就是搜索后面的每个文件(除了最后一个参数),如果存在,则uri变成相应的uri,但仍在当前location继续处理。如果文件都不存在,则直接到最后一个参数所在的location,最后一个参数除了普通uri,也可使用=httpcode和@namedblock

这样子 那也就是说try_files可以代替rewrite吗。。
rewrite /(.*)/(.*)$ index.php?c=$1&b=$2;
是不是可以写成
location ~ /(.*)/(.*)${
try_files index.php?c=$1&b=$2 =404;
}
这样子?

try_files不带get参数

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服