2020-04-28 14:35:34
在Web开发中,通常设置HTTP能在URL不映射文件系统中的文件时访问资源。 虽然可以在某种程度上使用重定向语句来解决这个问题,但是许多部署对于URL重写具有更复杂的需求。 Apache的mod_rewrite提供重写功能,以便用户使用简洁明了的URL进行交互,同时仍然能够为管理员提供他们认为合适的网站目录架构。
在
RewriteEngine on
您可以创建任意数量的重写规则。 这些规则提供了服务器比较入站请求的模式。 如果请求与重写模式匹配,则服务器按照规则所述修改请求,并处理该请求。 下面是一个重写规则的例子:
RewriteRule ^post-id/([0-9]+)$ /posts/$1.html
让我们解析这条规则:首先,请注意,第一个字符串是匹配传入请求的模式。 第二个字符串指定要提供的实际文件。 Mod_rewrite模式使用正则表达式语法:^匹配字符串的开头,$匹配字符串的结尾,这意味着重写引擎不会重写与模式部分匹配的字符串。
上面的例子会重写指定以/post-id/开头的路径的所有URL,并包含一个或多个数字(例如[0-9]+),在/posts/目录中提供相应的.html文件。 模式中的括号术语指定了作为$1,$2,$3等传递给第二个字符串的变量。
您可以创建和应用多个重写规则,但这些规则是顺序匹配的。 表示RewriteRules的顺序可以影响匹配的规则。
或者,您可以插入RewriteBase指令来修改重写规则的行为。 让我们假设:
这些指令是为/srv/www/example.com/public_html/目录指定的。
某些用户以http://example.com/post-id/200形式发送请求,其中200可能是长于一位数的任何数字。
某些用户以http://example.com/page/title-of-page的形式发送请求,其中“title of page”可能代表任何字符串。
这些文件位于/srv/www/example.com/public_html/objects/上,匹配请求文件名称,扩展名为.html。
RewriteEngine on RewriteBase /objects RewriteRule ^post-id/([0-9]+)$ $1.html RewriteRule ^page/([^/]+)$ $1.html
上面的重写规则集作用如下:
http://example.com/post-id/200/,提供位于/srv/www/example.com/public_html/objects/200.html的文件
http://example.com/page/free-the-toast/,提供位于/srv/example.com/public_html/objects/free-the-toast.html的文件
使用RewriteCond参数,您可以限制使用RewriteRule的条件。 让我们从WordPress应用程序的默认重写规则中获取以下示例:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
在此示例中,以上下文的顶层开始的所有请求都受重写规则的影响。 这由RewriteBase /指令指定。 上下文由在虚拟主机,目录块或.htaccess文件中指定伪指令的位置决定。
RewriteCond语句指示Apache仅当满足条件时才应用遵循的规则。 在上述示例中,匹配请求的文件名称在文件系统上不存在(例如,!-f),或者目录不存在(例如!-d)的请求。
简而言之,如果两者都为真,并且文件和目录都不存在,则Web服务器将请求附加到index.php。 也就是说,f用户请求http://example.com/?post=123或http://example.com/post/123,服务器将返回index.php?post=123或index.php/post/123。
最后,有一些代码,你可以附加到一个RewriteRule,修改重写的行为。 在前面的例子RewriteRule ./index.php [L],我们看到代表“最后规则”的[L]选项。 这阻止Apache应用任何其他重写规则。 最常见的附加选项包括:
F告诉客户端该URL被禁止,用HTTP代码403响应。
N强制mod_rewrite重新开始重写过程,并允许多阶段重写。
R告诉客户端所请求的页面已经移动,具有用于临时重定向的HTTP代码302。 要表示该网页已永久移动,请指定“R=301”。
您可以在RewriteRule结尾处指定多个选项,用逗号分隔它们,如:[L,R=301]
CentOS 7.0安装LAMP服务器(PHP+MariaDB+Apache)
06-07
CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)
05-06
Zabbix3.0监控Apache2.4服务器状态
07-17
Linux Apache安装加载mod_deflate模块
04-11
Apache mod_alias设置路径别名
06-22
Debian 7 (Wheezy)安装配置Apache mod_fastcgi PHP-FPM
07-20
服务器在主机外接SCSI卡连接SureSCSI310R阵列柜后,原系统无法正常启动。
07-01
CentOS7安装配置PostgreSQL数据库服务器
06-20
Linux smbd Samba服务器程序命令详解
06-28
T168 G7服务器板载Intel 82574L和82579LM网卡指示灯状态说明
06-30
T270 G5服务器liunx系统运行过程报“nautilus崩溃”错误的原因?
07-18
TR260 G2服务器内存DIMM安装配置和内存插的槽分布
06-23
TR280服务器是否支持USB光驱启动进行系统安装?
06-26
Ubuntu 14.04安装Pritunl VPN服务器(带控制面板)
06-09
中信银行网银打开提示服务器通讯失败
06-21
联想万全R520 G7服务器系统用户手册V1.0
06-08
Apache优化:修改最大并发连接数
05-01
Apache禁止访问目录列出文件列表
07-22
Apache配置结构
05-15
25个Apache性能优化技巧推荐
06-24
服务器安全工具(服务器安全防护软件) 1.2.2.0 免费绿色版
329.2K
下载BIGEMAP离线地图服务器(离线地图开发者工具) v15.4.0.0 破解版
48.9M
下载C-Lodop云打印服务器下载
9.3M
下载Titan FTP Server(SFTP服务器软件) v19.00.3537 免费版
50.1M
下载tomcat7.0 (Web 应用服务器)官方版
9.3M
下载windows server 2016(服务器操作系统)中文版
5.18G
下载xp iis(Web服务器)6.0 中文版
13.4M
下载宝塔面板(服务器运维面板) v7.4.2 破解版
25KB
下载深蓝群Ping工具 V2.1 绿色版 多服务器多线程群ping工具
487 KB
下载网络文件服务器下载
837.6KB
下载Apache Logs Viewer破解版
22.98 MB
下载modeFRONTIER 2016免费版下载 附安装教程
4.05 GB
下载考无忧2017职称计算机模块-用友T3财务软件 v17.1
38.95 MB
下载考无忧2018职称计算机模块-AutoCAD2004 v18.1
51.66 MB
下载考无忧2018职称计算机模块-Excel2003模块 v18.2
62.3 MB
下载考无忧2018职称计算机模块-Excel2007模块 v18.2
63.05 MB
下载考无忧2018职称计算机模块-Word 2007模块 v18.2
73.9 MB
下载Emby Server下载
101M
下载HeidiSQL下载
10.1M
下载WampServer(php集成环境安装包)下载 v3.0.6中文
378.36 MB
下载