重写配置
1、打开 apache 里httpd.conf(通常是在/etc/httpd/conf目录里)
2、找到 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的 #
如果在 httpd 中查看是否调用 rewrite_module 通过 httpd -M 的参数来查看; 如果发现有 rewrite_module (shared) ,说明已经被调用了。
于大多数发行版来说,Apache 2的模块一般是位于如下的两个位置 /usr/lib/apache2/modules 或 /usr/lib/httpd/modules
3、找到 AllowOverride None 改成 AllowOverride All , 有两个全部改掉
AllowOverride 的参数设置为ALL,表示整台服务器上都支持URL规则重写。Apache 服务器要读每个网站下目录下的 .htaccess 文件。如果没有这个文件,或者这个文档没有定义任何关于URL重写的规则就不会有任何效果。设置 DocumentRoot 的 Directory (整台服务器):
<Directory "DocumentRoot所设置的路径"> # 比如我们把DocumentRoot的路径改为了 /,那我们也要把Directory做针对性的行为设置也要改成这个路径。 <Directory /> Options FollowSymLinks #AllowOverride None AllowOverride ALL Order allow,deny Allow from all </Directory>
4、设置单个站点 ,httpd-vhosts.conf / vhosts.conf 文件
<VirtualHost *:80> DocumentRoot "F:\phpStud\PHPTutorial\WWW\tp\public" ServerName tp.com ServerAlias gohosts.com <Directory "F:\phpStud\PHPTutorial\WWW\tp\public"> Options FollowSymLinks ExecCGI AllowOverride All # 如果此站点不开启url 重写 AllowOverride Noll,默认与全局设置一致 Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
5、重启apache
重写规则
网站根目录下创建 .htaccess 文件
1) R[=code](force redirect) #强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。 2) F(force URL to be forbidden) #禁用URL,返回403HTTP状态码。 3) G(force URL to be gone) # 强制URL为GONE,返回410HTTP状态码。 4) P(force proxy) # 强制使用代理转发。 5) L(last rule) # 表明当前规则是最后一条规则,停止分析以后规则的重写。 6) N(next round) # 重新从第一条规则开始运行重写过程。 7) C(chained with next rule) # 与下一条规则关联 如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。 8) T=MIME-type(force MIME type) # 强制MIME类型 9) NS (used only if no internal sub-request) # 只用于不是内部子请求 10) NC(no case) # 不区分大小写 11) QSA(query string append) # 追加请求字符串 12) NE(no URI escaping of output) # 不在输出转义特殊字符 例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] # 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo 13) PT(pass through to next handler) # 传递给下一个处理 例如: RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理 Alias /def /ghi 14) S=num(skip next rule(s)) # 跳过num条规则 15) E=VAR:VAL(set environment variable) # 设置环境变量
HTTP 跳转至 HTTPS 示例
RewriteEngine on # 开启重写 RewriteCond %{SERVER_PORT} !^443$ # 如果访问的不是 443 端口 RewriteCond %{REQUEST_URI} !^/tz.php #如果访问的url 不是 /tz.php RewriteRule (.*) https://%{SERVER_NAME}/$1 [R] # 跳转到 https://域名+$1
HTTP 80 强制转 HTTPS
RewriteEngine On RewriteCond %{SERVER_PORT} 80 # 如果访问的是80 端口 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L] # 跳转 https
强制301重定向 HTTPS
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / # 表示项目根目录 RewriteCond %{SERVER_PORT} !^443$ # 如果访问的不是443 端口 RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=301,L] # 重定向到 301 </IfModule>
访问不是一个文件也不是一个目录跳转指定页面
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f # 如果请求的不是文件 RewriteCond %{REQUEST_FILENAME} !-d # 如果请求的不是目录 RewriteRule ^(.*)$ http://other.kevin.com/$1 [R] #跳转到指定页面
图片防盗链
RewriteCond %{HTTP_REFERER} !^$ # 如果上个页面地址为空 RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC] #或者不是来自你自己的域名 RewriteRule \.(gif|jpg|png)$ - [F] #禁止访问
如果文件不存在重定向到404页面
RewriteCond %{REQUEST_FILENAME} !-f # 如果访问的不是一个文件 RewriteCond %{REQUEST_FILENAME} !-d #如果访问的不是一个目录 RewriteRule .? /404.php [L] #跳转到网站根目录 # 也可携带参数 #RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
重命名目录
RewriteRule ^/?old_directory/([a-z\.]+)$ new_directory/$1 [R=301,L]
相关文章 :https://www.cnblogs.com/kynewu/p/9088550.html
https://cloud.tencent.com/developer/article/1348412
apache 服务器 忽略大小写
1、查看系统有无mod_speling.so模块,路径:/etc/httpd/modules,如果没有就从别处下载一个;
2、加载此模块 vi /etc/httpd/conf/httpd.conf ,添加如下行,如果已经存在取消 ; 注释:
LoadModule speling_module modules/mod_speling.so <IfModule mod_speling.c> CheckSpelling On CheckCaseOnly On </IfModule>
3、重启httpd服务。