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]
在线转换工具不管用啊
1
holinhot OP 大神给看看
|
2
zmr90 2015-02-21 09:08:41 +08:00
http://90r.org/628.html 试下里面的网站,我试过还可以的
|
3
extreme 2015-02-21 10:19:13 +08:00 1
虽然我第一个使用的HTTP Server是Apache,但我开始自己写rewrite却不是Apache,而是Nginx,因此对mod_rewrite的语法不太了解。
也许你可以尝试说明用途(预期效果),而不是给mod_rewrite的规则,说不定别人更容易帮到你。 |
4
holinhot OP @extreme 用途是去掉网站.php后缀 比如http://www.baidu.com/login.php重写后改成http://www.baidu.com/login/
|
5
holinhot OP @louishothot 有利于seo
|
7
holinhot OP |
8
holinhot OP |
9
liuhaotian 2015-02-21 15:45:23 +08:00 1
if ($request_filename ~ "(.*)\.php") {
rewrite ^/(.*)\.php$ http://www.hwbj.net/$1 permanent; } if ($request_filename !~ "(.*)\.php") { rewrite ^/(.*)$ /$1.php last; } |
10
extreme 2015-02-21 15:55:42 +08:00
@louishothot
试试这个: 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; } |
11
extreme 2015-02-21 16:17:45 +08:00
@louishothot 刚刚测试了一下,发现一点问题,这个是完善的版本:
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; } |
12
ryd994 2015-02-21 17:43:35 +08:00 1
@liuhaotian
@extreme 诸位,if is evil,各种nginx文档里都已经强调过无数次了 http://wiki.nginx.org/IfIsEvil location ~ (.+)\.php$ { return 301 $1; } location / { try_files ${uri}.php =404; } |
14
liuhaotian 2015-02-21 17:55:37 +08:00 1
@ryd994 一直不是很懂try_files怎么用,看来要去好好学学了。谢谢@
|
15
ryd994 2015-02-21 18:12:57 +08:00 via Android
@liuhaotian try_files就是搜索后面的每个文件(除了最后一个参数),如果存在,则uri变成相应的uri,但仍在当前location继续处理。如果文件都不存在,则直接到最后一个参数所在的location,最后一个参数除了普通uri,也可使用=httpcode和@namedblock
|
16
liuhaotian 2015-02-21 18:21:58 +08:00 1
@ryd994 这样子 那也就是说try_files可以代替rewrite吗。。
rewrite /(.*)/(.*)$ index.php?c=$1&b=$2; 是不是可以写成 location ~ /(.*)/(.*)${ try_files index.php?c=$1&b=$2 =404; } 这样子? |
17
ryd994 2015-02-22 00:37:39 +08:00 via Android
@liuhaotian try_files不带get参数
|