月度归档:2016年04月

debian下开启.htaccess rewrite功能

1、启用rewrite模块

root身份执行:a2enmode rewrite

此时提示需要重启apache,先不管

2、修改根目录配置

方案一:vi /etc/apache2/apache2.conf
将对应目录或根目录下AllowOverride 属性修改为All
<Directory /home/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
方案二:若directory配置位于虚拟主机配置文件中,需要修改/etc/apache2/sites-enable/下对应配置文件。

3、重启服务器

root身份执行:/etc/init.d/apache2 restart 或 service apache2 restart

.htaccess二三事

近日写一些小的项目时遇到了url的一些奇葩需求,折腾许久终于解决,现在把解决方案记录下来。

1、将http://domain/admin/*的访问重写至http://domian/admin.php下,剩下的重写至index.php下

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^admin/[a-zA-Z0-9_?&/]*$ admin.php [L]
RewriteRule ^admin admin.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php
</IfModule>

2、将所有访问重写至index.html文件

实现:将对http://domain/archives/1的访问重写至http://domain/index.html下,使用JavaScript获取的url地址将包含archives/1。
因为简单的RewriteRule 不加参数直接写脚本名称只适用于目标脚本为动态语言脚本,即可以适用于index.php,若为index.html则报404错误。此时需要做特殊处理。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [a-zA-Z0-9_?&]$ index.html
RewriteRule [a-zA-Z0-9_?&]/$ index.html
</IfModule>