项目需求是将一个长链接参数很多的链接伪装成一个短链接
1.apache的rewrite模块的打开。
我本地用的是wamp集成环境,所以rewrite可以直接打开 wamp->apache->apache modules->rewrite_module
线上用的apac独立安装的apache,打开它的rewrite模块要做的有两个地方
1.把#LoadModule rewrite_module modules/mod_rewrite.so前面的#去掉。
2.找到
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
把 AllowOverride None 改为 AllowOverride All
最后就是重启一下apache服务器使配置生效,这样就支持.htaccess文件了
2.让apache服务器支持.htaccess
修改httpd.conf文件
Options FollowSymLinks
AllowOverride None
改为
Options FollowSymLinks
AllowOverride All
此处参考文章 http://blog.csdn.net/lhzjj/article/details/30050069
这样就打开了apache的rewrite的模块
2.rewrite规则将长链接伪装成短链接
这边rewrite的写的规则主要是正则写的
我这边是直接写在apache的httpd.conf中,写完之后重启apache,当然,要是在项目的根目录下面加上.htaccess文件,在这个文件里面写rewrite的规则也是可以得。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/apitest\.php
RewriteRule ^/item(.*)-(.*) /theweather/WX/app/index.php?i=4&c=entry&do=shop&m=ewei_shop&p=detail&id=$1&mid=$2 [L]
</IfModule>
//nginx实现链接的跳转
nginx的rewrite的规则直接在配置文件当中你相对应的server当中写就可以了
if ($uri !~ "^/apitest\.php"){
set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
rewrite ^/item(.*)-(.*) /app/index.php?i=4&c=entry&do=shop&m=ewei_shop&p=detail&id=$1&mid=$2 last;
}
nginx中tp框架去掉index.php
首先要让你的tp框架能在nginx中正常显示。你要让你的nginx支持pathinfo的路径形式,也就是a/b/c的路径形式
你在配置的时候
location ~ \.php {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
if (!-e $request_filename) {
rewrite ^/index.php/(.*)$ /index.php?s=$1 last;
break;
}
}
主要是增加标红的两句即可。
然后就是重写路径隐藏入口文件
if (!-e $request_filename) {
#一级目录
rewrite ^/(.*)$ /index.php/$1 last;
}
一样的重写规则直接重新去掉index.php就可以
nginx开启rewrite.