Codeigniter rewrite规则配置(apache)

第一步:修改apache配置文件。

DocumentRoot “E:/website”

Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

LoadModule rewrite_module modules/mod_rewrite.so

第二步:在站点根目录加.htaccess

RewriteEngine on
RewriteCond $1 !^(index.php|public|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

PS:如果用了rewrite,记得过滤你图片文件夹和样式文件夹,如我的站点的图片/样式/脚本的文件夹分别为images/css/js,.htaccess文件第行的内容改为RewriteCond $1 !^(index.php|images|css|js|public|robots.txt)

Apache核心(Core)指令和区别

<Directory>和<Location>指令都是Apache配置文件httpd.conf中的常见指令,它们都能对其指定的作用域进行访问控制,区别在于<Directory>针对的是文件系统,而<Location>针对的是网络空间。

 

文件系统是指服务器所在机器上的所能看见的磁盘系统中的目录,比如Linux下的/usr/local/apache,或Windows系统中的C:/Program Files/Apache。<Directory>指令可以对真实存在于文件系统中的目录及其子目录进行访问控制,具体能进行怎样粒度的访控可以参考Apache手册的<Directory>使用说明。比如apache的DocumentRoot配置成/usr/local/www,该目录中有一个网页文件index.htm,那么以下配置代码就能阻止任何人访问www目录。
<Directory /user/local/www>
Order allow,deny
Deny from all
</Directory>
此时,如果用http://yourdomain.com/index.htm来请求index.htm文件时,Apache就会根据以上配置信息拒绝所有外来请求。这里仅仅举个例子,在实际应用中,以上配置可能没什么意义。

 

网络空间是指网站被服务器发送或者呈现在浏览器中的视图,例如有一个网页地址http://yourdomain.com/test1/index.htm,通过映射的方法,它的实际存储位置可以在服务器的/usr/local/www/test2/目录中,这个时候,想要对/test1这个网络路径进行访问控制,那么就可以配置<Location>属性。还有一种应用情况,现在很多网页是通过数据库信息动态生成的,或者用velocity这类模板引擎渲染而来,这样生成的看似静态的网页实际上并没有真实存在于服务器的文件系统中,因此对这类地址如果用<Directory>指令就无法达到期望的访问控制效果,就是说配<Directory>是不起作用的,而用<Location>指令就能达到目的。例如:
<Location /test1>
Order allow,deny
Deny from all
</Location>

以上配置能将所有发向http://yourdomain.com/test1/*的请求都拒绝。同<Directory>一样,具体能在<Location>指令中做怎样粒度的权限控制可以参考Apache手册的<Location>使用说明。

 

除此之外,Apache对于httpd.conf文件中<Directory>和<Location>(以及<Files>、<VirtualHost>)和它们各自的正则表达式版本(<DirectoryMatch>、<FilesMatch>、<LocationMatch>等)有指定的合并顺序,因此一个配置段的指令可能会被后边的配置段指令比如覆盖。这里有几个例子可以很好的说明这个情况,例如:
<Location />
Order deny,allow
Allow from all
</Location>

# 这个<Directory>段将不会实际生效
<Directory />
Order allow,deny
Allow from all
Deny from badguy.example.com
</Directory>
由于合并时处理<Directory>在先,处理<Location>在后,因此上面<Directory>配置里的Deny from badguy.example.com会被<Location>覆盖掉,这是配置httpd.conf时要注意的地方。

 

还有一点,改过Apache的httpd.conf配置文件后,必须重启Apache服务。

discuz X2.5 rewrite 伪静态linux .htaccess文件设置 apache专用

# 将 RewriteEngine 模式打开
RewriteEngine On
# 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
RewriteBase /
# Rewrite 系统规则请勿修改
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^topic-(.+).html$ portal.php?mod=topic&topic=$1&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^article-([0-9]+)-([0-9]+).html$ portal.php?mod=view&aid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^forum-(w+)-([0-9]+).html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ forum.php?mod=viewthread&tid=$1&extra=page%3D$3&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^group-([0-9]+)-([0-9]+).html$ forum.php?mod=group&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^space-(username|uid)-(.+).html$ home.php?mod=space&$1=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-z]+)-(.+).html$ $1.php?rewrite=$2&%1

 

Linux 下 Apche 无法监听端口解决办法

想把apache改用端口,报如下错误:
(13)Permission denied: make_sock: could not bind to address [::]:81
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:81
no listening sockets available, shutting down
Unable to open logs

解决方法:

semanage port -l|grep http
semanage port -a -t http_port_t -p tcp 81

以上两个命令,一个是查看,一个是添加,如果有81端口,表示成功。

结束之后,重启apache。