nginx上配置.htaccess伪静态规则
在apache上.htaccess转向,只要apache编译的时候指明支持rewrite模块即可。
但是换到nginx上方法会有不同,有人说把.htaccess转向规则写到nginx的配置文件里面,官方提供的方法之一,肯定可行的。
不过,此方法有个问题:不方便,下次要更改一个伪静态转向规则的时候还得去nginx的配置文件或者nginx的虚拟网站的配置文件里面去改,相比apache直接在目录下放置.htaccess文件,nginx的这个办法显然很原始。
解决方法:
在nginx的配置文件中include .htacces文件就可以实现相同的功能了。
举个例子,要把www.jbxue.com的.htaccess迁移到nginx上,几个步骤:
第一步:修改.htaccess文件,因为apache的rewrite转向规则跟nginx的转向规则还是有一些不一样的,典型的不一样有nginx的根目录需要写在每行转向的地址前,每行规则必须以分号(;)结束,301或者404等跳转使用不同的格式。
apache上htaccess转换到nginx上:
RewriteEngine On
RewriteBase /
RewriteRule ^show-([-]+)-([-]+)\.html$ index.php?action=show&id=$&page=$
RewriteRule ^category-([-]+)-([-]+)\.html$ index.php?action=index&cid=$&page=$
RewriteRule ^archives-([-]+)-([-]+)\.html$ index.php?action=index&setdate=$&page=$
RewriteRule ^(archives|search|reg|login|index|links)\.html$ index.php?action=$
RewriteRule ^(comments|tagslist|trackbacks|index)-([-]+)\.html$ index.php?action=$&page=$
rewriteCond %{http_host} ^jbxue.com [NC]
rewriteRule ^(.*)$ http://www.jbxue.com/$1 [R=301,L]
ErrorDocument http://www.jbxue.com/
转换成nginx的规则
rewrite ^/show-([-]+)-([-]+)\.html$ /index.php?action=show&id=$&page=$;
rewrite ^/category-([-]+)-([-]+)\.html$ /index.php?action=index&cid=$&page=$;
rewrite ^/archives-([-]+)-([-]+)\.html$ /index.php?action=index&setdate=$&page=$;
rewrite ^/(archives|search|reg|login|index|links)\.html$ /index.php?action=$;
rewrite ^/(comments|tagslist|trackbacks|index)-([-]+)\.html$ /index.php?action=$&page=$;
if ($host != 'www.jbxue.com' ) {
rewrite ^/(.*)$ http://www.jbxue.com/$1 permanent;
}
error_page http://www.jbxue.com/;
第二步:修改nginx的配置文件,增加include该.htaccess文件
vi /etc/nginx/sites-available/www.jbxue.com
增加一行:include /var/www/www.jbxuecom/.htaccess
修改为相应的地址。
第三步:测试并重启
代码示例:
/etc/init.d/nginx -configtest
重启生效:
代码示例:
/etc/init.d/nginx restart