apache rewrite配置
来源:互联网 发布:飞鱼网络电视1.3.9 编辑:程序博客网 时间:2024/05/16 04:26
前言
今天将手头的ubuntu12.04 upgrade to ubuntu14.04,发现apache2.2 也自动升级到了apache2.4,然后之前的一个website的rewrite规则就不好用了。于是,从官网上找了点资料,然后自己反复测试,终于再次run起来了,并对rewrite中需要注意的细节有了一些心得。
新语法
在Apache2.4中,以前的Order 和Allow Deny指令已经取消了,改成了Require。Require的语法最常用的方式就是
Require all granted/denied<RequireAll>Require all grantedRequire not ip 192.168.2.*Require not host example.com</RequreAll>
RequireAll从名字上可以理解,就是需要里面的所有的auth都要满足,和以前的Satisfy用法类似
<RequireAny>
RequireAny就是只要有任何一个RequireAny中包含的auth项满足,就满足。
<RequireNone>
RequireNone就是需要包含在RequireNone中任何一个项都不满足才通过。
错误解决
说明:最开是我升级后,重新配置了website的监听端口以及DocumentRoot,然后访问localhost:port发现直接给出
ForbiddenYou don't have permission to access /xxx.html on this server.
因为我的website之前就是在当前用户的/home/user/目录,权限一般是700是不让其他用户(apache内置默认的Daemon用户)访问的,于是在/etc/apache2/apache.conf文件中找到设置${APACHE_RUN_USER}和${APACHE_RUN_GROUP}的地方,设置User 当前用户 ,Group 当前用户,restart Apache,本以为就此完事,发现仍然提示之前的Forbiden错误。
反复思考是不是路径不对,但仔细核对发现并没有错。后面在网上google了一番,找到有人问同样的问题,上面提示说是根目录默认是denied的,于是gvim打开/etc/apache2/apache2.conf仔细核查,发现如下配置信息:
<Directory />Options FollowSymLinksAllowOverride NoneRequire all denied</Directory><Directory /usr/share>AllowOverride NoneRequire all granted</Directory><Directory /var/www/>Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>原来如此,确实apache默认设置了根目录是不可访问的,但是我不是设置了自己的website的DocumentRoot目录是可访问的吗??
这个疑问困扰了半天,直到突然发现在sites-enabled/000-default.conf中才发现
上面的apache2.conf配置的是/var/www目录,而000-default.conf里面配置的是/var/www/html目录,难道是说配置某个目录只代表该目录下面的文件可以访问??
于是在自己的website对应的VirtualHost里面增加
<Directory /home/xxx/workspace/php_web/abc> Options -Indexes +FollowSymLinks AllowOverride None Require all granted</Directory>
<Directory <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">/home/xxx/workspace/php_web/abc/website</span><span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">></span> RewriteEngine on RewriteCond %{REQUEST_URI} ^([^./]+)$ RewriteRule ^.*$ index.php/%1 [L] RewriteCond %{REQUEST_URI} ^([^./]+)/([^./]+)$ RewriteRule ^.*$ index.php/%1/%2 [L] DirectoryIndex index.php index.html </Directory>
重启apache,然后访问,成功打开了主页。其实就是说如果要想让你的website可以访问根目录,必须要在它的父级目录或者祖先目录设置allow
高高兴兴,准备收工,随手点两个登陆发现,登陆失败。检查数据库没有问题。并且提示的是路径没有找到,直接推断应该是重写出了问题。看了几遍上面的重写规则配置,大体上没有问题,直觉感觉有可能是REQUEST_URI忽略了/导致的问题,于是加上去变成
<Directory /home/xxx/workspace/php_web/abc/website> RewriteEngine on RewriteCond %{REQUEST_URI} ^/([^./]+)$ RewriteRule ^.*$ index.php/%1 [L] RewriteCond %{REQUEST_URI} ^/([^./]+)/([^./]+)$ RewriteRule ^.*$ index.php/%1/%2 [L] DirectoryIndex index.php index.html </Directory>重启Apache,OK!
总结
一、apache access设置必须要设置website的父级目录或者祖先目录才能使DocumentRoot目录被直接访问
二、REQUEST_URI 包括了路径最开始的/
- Apache 配置 rewrite
- apache rewrite配置
- Apache下rewrite配置
- Apache Rewrite配置
- Apache Rewrite 拟静态配置
- Apache Rewrite 拟静态配置
- Apache Rewrite 拟静态配置
- apache rewrite 时配置方法
- Apache Rewrite 伪静态配置
- apache配置rewrite网页转发
- windows 下配置Apache Rewrite
- apache 虚拟主机和 rewrite 配置及 rewrite规则解释
- 配置zope的VHM和apache rewrite
- windows环境下apache rewrite配置
- windows环境下apache rewrite配置
- windows环境下apache rewrite配置
- Windows2003 +Apache URL Rewrite 配置记录
- Apache URL Rewrite配置(php 伪静态)
- ASPxSpinEdit控件在asp.net中的使用
- MSG_PEEK标志
- css中正确设置微软雅黑字体
- web登陆及其获取文本框信息
- 华为机试(一)
- apache rewrite配置
- 数组正负元素前后移动算法的实现(以0为分界线)
- ICE同步调用与异步调用(2)
- Android中虚拟器打开出错
- map中元素的插入
- Android 打造自己的个性化应用(二):应用程序内置资源实现换肤功能
- Unix的哲学
- 指针和引用的比较
- java中的冒泡排序与选择排序