Apache虚拟主机上使用rewrite规则的方法 (apache 虚拟主机rewrite)
AB资源网 2023-09-19 22:51 9967 浏览 0 评论
在Apache服务器上,虚拟主机的使用越来越普遍,它允许在同一台服务器上运行多个网站,并能够为每个网站分配独立的资源和配置。使用虚拟主机的另一个好处是能够对每个网站进行URL重写以获得更好的搜索引擎优化(SEO)效果。Apache服务器中的重写规则(rewrite rules)是URL重写的一种方式,它可以让您轻松地修改URL,以获得更易于管理和索引的URL。
本文将介绍如何在Apache虚拟主机上使用重写规则,以及如何编写基本的重写规则来优化您的网站的URL结构和在检索结果中显示的结果。
1. 开启mod_rewrite模块
在使用重写规则之前,您需要确保Apache的mod_rewrite模块已被启用。如果未启用,您需要在Apache配置文件中将其启用。在Debian和Ubuntu操作系统中,您可以执行以下命令启用mod_rewrite模块:
sudo a2enmod rewrite
启用后,重启Apache服务器使更改生效:
sudo systemctl restart apache2
2. 编写重写规则
Apache的重写规则使用.htaccess文件来定义规则。在虚拟主机的Web根目录中,您可以创建这样一个文件。如果您需要在不同的目录中设置不同的规则,您可以在该目录中创建一个.htaccess文件。
您可以使用Apache的RewriteRule指令来定义规则。这个指令有三个主要部分:
RewriteRule pattern substitution [flags]
这里是它们的意思:
– pattern:使用正则表达式定义匹配规则。
– substitution:替换字符串,在规则匹配时将其插入URL中。可以是静态或动态的。
– flags:可选项,允许您更改规则的行为或为特定类型的URL更改规则。
下面是一个例子,它将URL /articles.php?article=1 转换为 /article/1:
RewriteRule ^article/([0-9]+)/?$ /articles.php?article=$1 [NC,L]
这里是它的含义:
– ^article/([0-9]+)/?$是一个正则表达式匹配规则。它匹配以”/article/{任何数字}”的URL,例如/article/1或/article/34。
– /articles.php?article=$1是一个替换变量。它在匹配规则的URL结尾添加查询参数article,并指向/articles.php。
– [NC,L]是两个可选标志。[NC]是忽略大小写,[L]指定规则匹配后停止查找后续规则。
对于大多数网站,这些基本规则就足够了,您可以根据需要添加规则。
3. 使用变量和常量
除了静态字符串外,您还可以在替换字段中使用变量和常量。这使您可以轻松地组合不同的元素来构建URL。下面是一个例子:
RewriteRule ^profile/([a-z]+)/(\d+)/?$ /profile.php?category=$1&id=$2 [NC,L]
这里,模式使用变量,替换字段中的字符串连接了两个查询参数。
4. 使用RewriteCond
有时,您需要在规则条件中使用RewriteCond指令。这允许您使用多个条件来匹配规则。
例如,您可能需要在文件名中添加一个前缀,并且仅限于某些文件。
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.html
RewriteRule ^(.*)$ /static/$1.html [L]
这里的之一行使用RewriteCond检查请求的文件是否存在。第二行检查文件扩展名是否为.html。规则应用于所有请求,并将匹配到的URL重定向到/static/目录中的与请求路径相同的HTML文件。
这个例子展示了如何更进一步使用RewriteCond来限制规则匹配,以便只在特定情况下应用。
5. 在虚拟主机中使用RewriteRule
要在虚拟主机中使用重写规则,在虚拟主机配置文件中添加以下内容:
ServerName example.com
DocumentRoot /var/www/example.com/public_html
AllowOverride All
Require all granted
# Your RewriteRules here
RewriteEngine On
RewriteRule ^article/([0-9]+)/?$ /articles.php?article=$1 [NC,L]
这里’s例子假设您的虚拟主机根目录为/var/www/example.com/public_html。AllowOverride All指示Apache读取.htaccess文件,然后对其进行解析。您可以在指令中定义进一步的Web根目录配置。您可以在块中添加重写规则。
结论
相关问题拓展阅读:
- Rewrite的Rewrite介绍
- Apache如何开启Mod_rewrite模块以及PHPWind伪静态(全伪)
Rewrite的Rewrite介绍
很多情况下,某个 IP 的访问很容易造成 CPU 100% (比如 某些搜索引擎的固定抓取,别人大量的采集站点),这个时候我们就要利用一些有效的手段封掉对方的 IP,让他无法消耗服务器的资源,封 IP 的方法有很多种,如果你的 Web 服务器安装了 Rewrite 模块的话,也可以试试利用 Rewrite 规则封掉对方的 IP。
例如我们把某个特定的 IP 直接重定向到 baidu 首页,在网站根目录的 .htaccess 文件里添加代码:
Code:
RewriteCond % 123.123.123.123
RewriteRule ^(.*)$
$1
将 123.123.123.123 这个 IP 替换成您要限制的 IP 即可。如果要实现多个 IP ,可以这样写:
RewriteCond % 123.123.123.123
RewriteCond % 124.124.124.124
RewriteRule ^(.*)$
$1 Rewrite主要的功能就是实现URL的重写。它的正则表达式是基于Perl语言,入站的规则用于修改纯森陪 HTTP 请求 Url。这些规则可以为以下几个目的,如演示对用户更加友好的 URL 命名空间为您的 Web 站点,将请求的 Url 重定向到新位置,或阻止访问 Url 来提供服务。出站的重写规则修改 HTTP 响应。例如,如果您的 Web 站点的导航结构已更改,您可以创建修改您的内容中的 Url,以便将 Web 页的内容指向正确的位置出站规则。然后,您可以创建基于缓存的位置与新的 url 的客户端请求重定向的入站的规则。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。春仔如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)
有两种方法,一种是在httpd.conf的全局下直接利做蠢用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess)
要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。 一.我们通过在IIS中安装一个名为 ISAPI_Rewrite 的ISAPI筛选器来实现 Rewrite 功能,您需要做的事情只有一个,就是修改配置文件 httpd.ini ,有关该组件的详细使用方法,您可以登录该组件官方网站
来学习,这里我们举一个简单的例子来说明它的用法。
假设您要实现这样的 Rewrite 功能:您希望当用户访问 /about.htm (您的空间里可以并不需要存在 about.htm)的时候实际访问的是 /index.html 。
设置方法是:
1、创建一个文本文件,内容为
RewriteRule /about\.htm /index\.html
这里,RewriteRule 这一行即为规则行,这一行由三部分组成,三部分由空格隔开,之一部分即 RewriteRule 这几个字,第二部分为用户访问的地址(使用正则表达式),第三部分为实际存在于服务器上的文件路径。
2、将上述文件保存,命名为 httpd.ini 。
3、将这个文件上传到您的网站根目录中,对于我们的虚拟主机,即上传至 /web 文件夹中。
这时,当您访问 about.htm 的时候,看到的就是 index.html 的内容。
Rewrite 是一个功能强大的平台,要真正的使用它,您可能要花费相当长的时间来学习。如果您使用像 Discuz! 论坛等支持伪静态的系统,而仅仅是需要使用伪静态功能,那么您可以不必学习,直接复制论坛开发者提供的配置文件即可,但要注意配置文件必须命名为 httpd.ini ,并且这个文件必须放在网站的根目录下。
httpd.ini 修改或者上传后一般会立即生效,如果长时间不能生效,请登录主机控制面板将网站停止然后再启动。
评述:不建议修改http.conf文件,因为这样需要重新启动apache。建议在项目的根目录建立一个文档,文档名字就是.htaccess,然后把重写规则写进去,这样就不需要重启apache。
二、怎样借助 Rewrite 功能为特定的域名显示特定文件夹中的内容?
这实际上是 Rewrite 功能的巧用,因为我们既然可以将 /about.htm 重写为 /index.html ,我们也就可以把 /about.htm 重写为 /about/ 。下面我们讲具体的实现方法。
我们假设您有两个域名
www.name1.com
和
www.name2.com
,我们实现让访问
www.name1.com
时看到的是网站根下的内容,而访问
www.name2.com
时看到的是 /name2/ 文件夹中的内容。
那么设置步骤如下:
1、将您的网站捆绑域名
www.name1.com
和
www.name2.com
,这个非常重要,两个域名都要捆绑。这时候如果不做设置,两个域名访问的都是网站根下。
2、修改上述问题一中的 httpd.ini 文件,在尾部增加以下内容:
RewriteCond Host: www\.name2\.com
# 表示下一行规则只对
www.name2.com
生效(正则表达式中 \. 表示 . 本身)。
RewriteRule ^(.*)$ /name2/$1
# 表示将所有网页 Rewrite 到 name2 文件夹中,表示忽略大小写。
请确认上述内容位于 行之下,如果原本网站不存在 httpd.ini 文件,请将上述内容前面加上 。
3、将修改后的 httpd.ini 上传到网站根下覆盖原文件。
通过这个方法,您可以将捆绑在网站上的任何一个域名采用任何特定的 Rewirte 规则,实现类似捆绑子目录的功能当然也是不在话下。这样,您的空间能捆绑多少个域名,您就可以建立多少个内容不同的网站了。 ngx_http_rewrite_module模块允许正则替换URI,返回页面重定向,和按条件选择配置。
ngx_http_rewrite_module模块指令按以下顺序处理: 处理在server级别中定义的模块指令; 为请求查找location; 处理在选中的location中定义的模块指令。如果指令改变了URI,按新的URI查找location。这个循环至多重复10次,之后nginx返回错误500 (Internal Server Error)。 指令 语法:break; 默认值:—上下文:server,location,if 停止处理当前这一轮的ngx_http_rewrite_module指令集。
举例:
if ($slow) { limit_rate 10k; break;} 语法:if(condition) { … } 默认值:—上下文:server,location 计算指定的condition的值。如果为真,执行定义在大括号中的rewrite模块指令,并将if指令中的配置指定给请求。if指令会从上一层配置中继承配置。
条件可以是下列任意一种: 变量名;如果变量值为空或者是以“0”开始的字符串,则条件为假; 使用“=”和“!=”运算符比较变量和字符串; 使用“~”(大小写敏感)和“~*”(大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量$1..$9引用。如果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中。 使用“-f”和“!-f”运算符检查文件是否存在; 使用“-d”和“!-d”运算符检查目录是否存在; 使用“-e”和“!-e”运算符检查文件、目录或符号链接是否存在; 使用“-x”和“!-x”运算符检查可执行文件; 举例:
if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break;}if ($http_cookie ~* id=(+)(?:;|$)) { set $id $1;}if ($request_method = POST) { return 405;}if ($slow) { limit_rate 10k;}if ($invalid_referer) { return 403;}
内嵌变量$invalid_referer的值是通过valid_referers指令设置的。 语法:returncode; returncodeURL; returnURL; 默认值:—上下文:server,location,if 停止处理并返回指定code给客户端。返回非标准的状态码444可以直接关闭连接而不返回响应头。
从0.8.42版开始,可以在指令中指定重定向的URL(状态码为301、302、303和307),或者指定响应体文本(状态码为其它值)。响应体文本或重定向URL中可以包含变量。作为一种特殊情况,重定向URL可以简化为当前server的本地URI,那么完整的重定向URL将按照请求协议($scheme)、server_name_in_redirect指令和port_in_redirect指令的配置进行补全。
另外,状态码为302的临时重定向使用的URL可以作为指令的唯一参数。该参数应该以“
0.7.51版本以前只能返回下面状态码: 204、400、402— 406、408、410、411、413、416 和 500— 504。
直到1.1.16和1.0.13版,状态码307才被认为是一种重定向。 语法:rewriteregexreplacement; 默认值:—上下文:server,location,if 如果指定的正则表达式能匹配URI,此URI将被replacement参数定义的字符串改写。rewrite指令按其在配置文件中出现的顺序执行。flag可以终止后续指令的执行。如果replacement的字符串以“
可选的flag参数可以是其中之一: last 停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location; break 停止执行当前这一轮的ngx_http_rewrite_module指令集; redirect 在replacement字符串未以“ permanent 返回状态码为301的永久重定向。 完整的重定向URL将按照请求协议($scheme)、server_name_in_redirect指令和port_in_redirect指令的配置进行补全。
举例:
server { … rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return 403; …}
但是当上述指令写在“/download/”的location中时,应使用标志break代替last,否则nginx会重复10轮循环,然后返回错误500:
location /download/ { rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; return 403;}
如果replacement字符串包括新的请求参数,以往的请求参数会添加到新参数后面。如果不希望这样,在replacement字符串末尾加一个问号“?”,就可以避免,比如:
rewrite ^/users/(.*)$ /show?user=$1? last;
如果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中。 语法:rewrite_logon|off; 默认值:rewrite_log off;上下文:http,server,location,if 开启或者关闭将ngx_http_rewrite_module模块指令的处理日志以notice级别记录到错误日志中。 语法:setvariablevalue; 默认值:—上下文:server,location,if 为指定变量variable设置变量值value。value可以包含文本、变量或者它们的组合。 语法:uninitialized_variable_warnon|off; 默认值:uninitialized_variable_warn on;上下文:http,server,location,if 控制是否记录变量未初始化的警告到日志。
内部实现
ngx_http_rewrite_module模块的指令在解析配置阶段被编译成nginx内部指令。这些内部指令在处理请求时被解释执行。而解释器是一个简单的堆栈机器。
比如,下面指令
location /download/ { if ($forbidden) { return 403; } if ($slow) { limit_rate 10k; } rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;}
将被翻译成下面这些指令:
variable $forbiddencheck against zero return 403 end of codevariable $slowcheck against zeromatch of regular expressioncopy /copy $1copy /mp3/copy $2copy .mp3end of regular expressionend of code
请注意没有对应上面的limit_rate指令的内部指令,因为这个指令与ngx_http_rewrite_module模块无关。nginx会为这个if块单独创建一个配置,包含limit_rate等于10k。如果条件为真,nginx将把这个配置指派给请求。
指令
rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;
可以通过将正则表达式中的之一个斜线“/”放入圆括号,来实现节约一个内部指令:
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
对应的内部指令将会是这样:
Apache如何开启Mod_rewrite模块以及PHPWind伪静态(全伪)
一 开启Mod_rewrite模块打汪裂配开Apache2\conf\httpd.conf搜源族索 LoadModule rewrite_module modules/mod_rewrite.so (Apache2是这个)去掉前面的#搜索AllowOverride None 替换为 AllowOverride All有好几个找到和下面代码类似的那个
DocumentRoot D:/www
ServerName localhost
RewriteEngine on
#规则放在下面即可
咐租
可以对每个虚拟主机衡如兆做单独的URL Rewrite
自己创建一橡顷个.htaccess或从godaddy空间backups文件夹中拷贝一个出来到网站根目录,打开并添加如下代码:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)-htm-(.*)$ $1.php?$2
保存。
OK!
apache 虚拟主机rewrite的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于apache 虚拟主机rewrite,Apache虚拟主机上使用rewrite规则的方法,Rewrite的Rewrite介绍,Apache如何开启Mod_rewrite模块以及PHPWind伪静态(全伪)的信息别忘了在本站进行查找喔。
相关推荐
- 踏入阿里云服务器代理商之门:步骤和技巧 (怎么成为阿里云服务器代理商)
-
作为目前全球更大的云计算服务提供商之一,阿里云在中国市场的份额一直占据领导地位。如果你希望在云计算领域开展业务,成为阿里云服务器代理商可能是个不错的选择。本文将为大家详细介绍具体的步骤和技巧,帮助你成...
- 高性价比,足够优惠! 30美元起,年付美国VPS,值得拥有! (美国vps 年付)
-
近年来,随着互联网的不断发展,越来越多的网站需要使用虚拟主机服务,以提供更加稳定的服务质量和更好的访问速度。而虚拟主机的使用也因此成为了越来越普遍的一种方式。但是,在选择虚拟主机服务时,除了考虑到稳定...
- 评测美国云服务器,推荐性价比高的品牌 (美国云服务器哪个好用)
-
近年来,随着人们对于云计算的需求不断增加,云服务器也逐渐成为了企业、机构和个人等用户参与服务的主要方式之一。而在众多的云服务器品牌中,美国云服务器更是备受欢迎。而对于那些想要评测美国云服务器的用户来说...
- 群晖服务器的登录方法详解 (群晖服务器如何登陆)
-
群晖服务器是一种高效可靠的存储和共享平台,它可以提供非常多的实用功能和服务。但是,在开始使用之前,你需要登录到你的群晖服务器。在本文中,我们将详细讲解群晖服务器的登录方法。一、了解群晖服务器的基本概...
- 紧急通知:CDN服务器可能遇到故障,需及时解决! (cdn服务器可能发生故障)
-
作为一个网站管理员,CDN服务器的重要性我们再清楚不过了。最近,我们收到了来自网络运营商的紧急通知,通知我们CDN服务器可能遇到故障,需要及时解决。CDN服务器,即内容分发网络服务器,是在全球各个位...
- 办公室网络瘫痪!无法连接局域服务器怎么办? (连接不了局域服务器)
-
办公室网络瘫痪是企业中常见的问题之一。一旦网络瘫痪,会影响到员工的工作效率和企业的营运。当你打开电脑,却发现无法连接局域服务器时,这时该如何应对呢?1.检查网络连接检查电缆是否连接正确,网线是否...
- 利润吗?买云主机,能否带来收益? (买云主机能赚)
-
随着互联网的飞速发展,云计算作为一种新型的计算模式,其广泛应用在各个领域之中。其中,云主机服务是云计算的重要组成部分,已经成为很多企业选择托管的首选方式。随着云主机的发展和普及,很多人开始关注,如果购...
- .NET轻松打开FTP服务器文件夹,方便快捷管理文件 (.net打开ftp服务器文件夹)
-
在现代科技的浪潮下,越来越多的企业选择使用云服务器来存储和共享数据。FTP服务器是一个非常有用的工具,它允许用户上传、下载、删除和共享文件。然而,FTP管理文件需要一些特定技能和知识,否则操作可能会变...
- 2023企业服务器版:全面升级,助力企业发展 (2023 企业服务器版)
-
2023年,微软推出了全新的企业服务器版本,旨在为企业用户提供更为稳定、高效的IT系统支持,更好地助力企业发展。随着互联网和信息技术的飞速发展,企业面临着越来越大的信息化压力。如何建设一个高效、稳定...
- 享受超低价格!2023年付VPS,轻松搭建私人网站 (2023便宜年付vps)
-
当今时代,互联网充斥着各种各样的网站,无论是企业还是个人都会拥有一个网站,用来展示自己的产品或者知识。而搭建一个私人网站也是越来越普遍的事情。那么,如何搭建一个便捷而且又不贵的私人网站呢?本文将为大家...
- 回顾2023服务器系统:经典之作还是过时技术? (2023服务器系统)
-
2023年,微软公司推出了WindowsServer2023,这是一款非常成功的服务器操作系统,许多企业和机构使用它进行各种任务和应用程序。然而,随着时间的推移,新技术的发展以及安全漏洞的增加,2...
- 2023 Q3服务器排名发布:领先厂商与新兴品牌争夺冠军 (2023 Q3服务器排名)
-
近年来,随着互联网技术的迅速发展,服务器市场也持续升温。市场上主要的服务器品牌包括戴尔、惠普、联想、IBM等。而在这些老牌企业的竞争下,新兴的服务器品牌也在不停崛起。根据2023Q3服务器排名发布,...
- 「低成本高性能!100g云服务器价格惊喜震撼!」 (100g云服务器价格)
-
低成本高性能!100g云服务器价格惊喜震撼!现今的互联网时代,任何一家公司都需要拥有自己的网站,以便宣传公司产品、服务和品牌。一个高速、可靠的云服务器是每个公司的必备工具之一。就在不久之前,网络服务...
- 1u服务器显卡:强大性能让服务器效率提升 (1u服务器显卡)
-
1U服务器显卡:强大性能让服务器效率提升随着信息技术的飞速发展,人们对数据处理和存储的需求越来越高,尤其对企业级服务器的性能要求也越来越苛刻。随着、大数据、云计算等诸多新技术的不断涌现,服务器的效率...
- 韩国将于2023年推出云服务器服务,助力云计算技术的发展。 (2023韩国云服务器)
-
韩国将于2023年推出云服务器服务,助力云计算技术的发展随着互联网的高速发展,云计算技术已经成为了数字化时代的一项重要技术。云计算技术是一种以互联网为基础,将不同的底层服务封装成云服务器,以便用户可...
你 发表评论:
欢迎- 一周热门
-
-
大网数据:双12秒杀聚惠,湖北100G高防云低至0元/月,湖北独服务器低至210元、200G高防+50Mbps带宽
-
HostYun廉价洛杉矶三网回程CN2 GIA云服务器内测13元/月起(美国原生IP,去程10Gbps防御)
-
HostYun洛杉矶大硬盘云服务器9折22.5元/月起(240G-500G硬盘/1Gbps/10G防御)
-
大网数据、湖北高防云服务器低至39元/月起、湖北高防独服务器低至245元起(200G硬防、金盾+傲盾防CC)
-
樊云香港双程CN2及洛杉矶50G高防三网CN2 GIA云服务器9折22.5元/月起
-
spinservers圣何塞/达拉斯10Gbps带宽高配服务器月付89美元起
-
DogYun新上韩国独立服务器,E5/SSD+NVMe优惠后300元/月,自动化上架
-
tmhhost美国高防云服务器8折_CeRaNetworks机房/三网cn2直连/适合建站
-
高防服务器大网数据湖北独服务器低至210元、200G高防+50Mbps带宽
-
初忆云 – 2020年中云聚惠全场五折 BGP云服务器低至88/年,抓紧上车
-
- 互动交流
- 标签列表
- 最新评论
-
您的文章条理清晰,论述有据,说服力强。您的文章情感真挚,能够触动人心,引起共鸣。https://www.renhehui.com/renhehui/1479.h
沉醉于月色 评论于:08-09虚拟机部署好后跟物理机一样当服务器的,只是它依赖了本地物理机不要关机为前提。对于外网访问内网场景,本地内网搭建服务器后需要提供到互联网上连接访问的,比较简便的
访客 评论于:03-01- 刘中宜 评论于:11-01
- 访客 评论于:06-03
- AB资源网 评论于:05-08
- AB资源网 评论于:11-22
- AB资源网 评论于:11-22
- 頹廢了悲伤 评论于:11-15
- 南风知我意 评论于:11-15
- 心若冰凝 评论于:11-15