Apache如何使用rewrite模块

Apache如何使用rewrite模块,第1张

解决方案1. 需要在apache(Unix平台最流行的WEB服务器平台)的配置文件httpd.conf中加入相应配置:apache(Unix平台最流行的WEB服务器平台)-1.3.x版本,在/usr/Prima(最完善的虚拟主机管理系统)/apache(Unix平台最流行的WEB服务器平台)_ssl/conf/httpd.conf里加入:LoadModule rewrite_module libexec/mod_rewrite.soAddModule mod_rewrite.capache(Unix平台最流行的WEB服务器平台)-2.x版本,在/etc/httpd/conf/httpd.conf里加入:LoadModule rewrite_module modules/mod_rewrite.so2. 重启apache(Unix平台最流行的WEB服务器平台):apache(Unix平台最流行的WEB服务器平台)-1.3.x:/usr/Prima(最完善的虚拟主机管理系统)/apache(Unix平台最流行的WEB服务器平台)_ssl/bin/apache(Unix平台最流行的WEB服务器平台)ctl restartapache(Unix平台最流行的WEB服务器平台)-2.x:/etc/init.d/httpd restart3. 在/usr/Prima(最完善的虚拟主机管理系统)/etc/httpd/virtual.conf的需要.htaccess和rewrite功能的站点配置中加入:AllowOverride Options FileInfo注意FileInfo,这是支持RewriteEngine的关键4. 之后只需要用户自行在需要.htaccess的目录中配置.htaccess文件了,如需要用rewrite模块,加入如下:RewriteEngine On[rewrite配置]5. Windows下可以先将.htaccess内容写入一个文本文件中,然后将此文本文件上传到服务器需要.htaccess的目录中,改名为.htaccess即可。按照以上配置,即可使用rewrite模块。

一 开启Mod_rewrite模块打开Apache2\conf\httpd.conf搜索 LoadModule rewrite_module modules/mod_rewrite.so (Apache2是这个)去掉前面的#搜索AllowOverride None 替换为 AllowOverride All有好几个找到和下面代码类似的那个</IfModule## "D:\usr\local\Apache2\cgi-bin" should be changed to whatever your ScriptAliased# CGI directory exists, if you have that configured.#<Directory "D:\usr\local\Apache2\cgi-bin"AllowOverride AllOptions NoneOrder allow,denyAllow from all</Directory二 在Apache2\conf\httpd.conf 最后一行添加<IfModule mod_rewrite.cRewriteEngine OnRewriteRule ^(.*)-htm-(.*)$ $1.php?$2

1、基于ip地址的虚拟主机

复制代码代码如下:

Listen 80

<VirtualHost 172.20.30.40>

DocumentRoot /home/httpd/html1

ServerName www.ok1.com

ErrorLog /usr/local/apache/logs/error1_log

CustomLog /usr/local/apache/logs/access1_log combined

</VirtualHost>

<VirtualHost 172.20.30.50>

DocumentRoot /home/httpd/html2

ServerName www.ok2.com

ErrorLog /usr/local/apache/logs/error2_log

CustomLog /usr/local/apache/logs/access2_log combined

</VirtualHost>

2、基于IP 和多端口的虚拟主机配置

复制代码代码如下:

Listen 172.20.30.40:80

Listen 172.20.30.40:8080

Listen 172.20.30.50:80

Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>

DocumentRoot /www/example1-80

ServerName www.example1.com

</VirtualHost>

<VirtualHost 172.20.30.40:8080>

DocumentRoot /www/example1-8080

ServerName www.example1.com

</VirtualHost>

<VirtualHost 172.20.30.50:80>

DocumentRoot /www/example2-80

ServerName www.example1.org

</VirtualHost>

<VirtualHost 172.20.30.50:8080>

DocumentRoot /www/example2-8080

ServerName www.example2.org

</VirtualHost>

3、单个IP 地址的服务器上基于域名的虚拟主机配置

复制代码代码如下:

# Ensure that Apache listens on port 80

Listen 80

# Listen for virtual host requests on all IP addresses

NameVirtualHost *:80

<VirtualHost *:80>

DocumentRoot /www/example1

ServerName www.example1.com

ServerAlias example1.com. *.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /www/example2

ServerName www.example2.org

# Other directives here

</VirtualHost>

如果您感觉上面的文章还不够详细可以看下下面的文章:

实验目标:在apache实现基于域名的虚拟主机

实验用的XAMPP版本为1.7.7,内含apache版本为2.2.21

实验前准备:

1. 为了测试不同的域名,在Windows/System32/drivers/etc/下觅得hosts文件,在其中添加实验用的域名若干,如 -

复制代码代码如下:

127.0.0.1 test1.net

127.0.0.1 test2.net

如此,则在浏览器中输入该俩域名时,Windows将其解析为127.0.0.1本地地址。即,在浏览器中访问localhost, test1.net, test2.net均可访问XAMPP的欢迎页。

2. 在apache目录下建立目录,以放置您不同的网站。为保护XAMPP原有的htdocs中的欢迎页内容,实验另外建立了与htdocs平级的htdocs1目录,在其下建立了test1.net, test2.net两个子目录用以放置实验用的网站。如下 -

apache/htdocs1/test1.net - 放置test1.net网站内容

apache/htdocs1/test2.net - 放置test2.net网站内容

在这两个目录中各新建hello world一网页 index.html,内容 -

复制代码代码如下:

<HTML>

<HEAD></HEAD>

<BODY>

<H1>hello~, 这是[对应的网站名,用以区别].net</H1></BODY>

</HTML>

实验步骤:

1. 找到apache/conf/httpd.conf, 将其中的

ServerAdmin

ServerName

DocumentRoot

注释掉。

2. 在httpd.conf中,找到行

Include "conf/extra/httpd-vhosts.conf"

如被注释则解注。该文件记载了虚拟主机的参数。[以前虚拟主机参数是直接填写在httpd.conf中的,为了更好地组织文件,将其分离出去,类似于某些编程语言一样。因此httpd.conf中include它,即相当于把它的内容填在了httpd.conf中。]

3. 这个httpd-vhosts.conf文件格式基本如下 -

复制代码代码如下:

#blah-blah

NameVirtualHost *:80

#blah-blah

#blah-blah

<VirtualHost *:80>

ServerAdmin XXXXXXXX

DocumentRoot "XXXXXXXX"

ServerName XXXXXXX

ServerAlias XXXXXX

ErrorLog "logs/XXXXXX-error.log"

CustomLog "logs/XXXXXXX-error.log" combined

</VirtualHost>

需要修改的,就是<VirtualHost>中的参数了。这个可以参见apache官方文档。根据实验域名,可以增加两个<VirtualHost>:

复制代码代码如下:

<VirtualHost *:80>

ServerAdmin adm@test1.net

DocumentRoot "C:/xampp/htdocs1/test1.net"

ServerName test1.net

ServerAlias www.test1.net

ErrorLog "logs/test1-error.log"

CustomLog "logs/test1-access.log" combined

<Directory "C:/xampp/htdocs1/test1.net">

order allow,deny

allow from all

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerAdmin adm@test2.net

DocumentRoot "C:/xampp/htdocs1/test2.net"

ServerName test2.net

ServerAlias www.test2.net

ErrorLog "logs/test1-error.log"

CustomLog "logs/test1-access.log" combined

<Directory "C:/xampp/htdocs1/test2.net">

order allow,deny

allow from all

</Directory>

</VirtualHost>

注意,如果不在各VirtualHost中定义Directory的可访问性,你将遇到的是Access Forbidden!就连原来的localhost也是。

4. 由于之前注释掉了httpd.conf中的ServerName, DocumentRoot等,为了仍然能以localhost访问原XAMPP欢迎页,就在增加一个VirtualHost,如下 -

复制代码代码如下:

<VirtualHost *:80>

ServerAdmin adm@localhost

DocumentRoot "C:/xampp/htdocs"

ServerName localhost

ErrorLog "logs/localhost-error.log"

CustomLog "logs/localhost-access.log" combined

<Directory "C:/xampp/htdocs">

order allow,deny

allow from all

</Directory>

</VirtualHost>

为了避免出错,把它放置在第一个Virtualhost位置。

至此,apache基于域名的虚拟主机配置完成。可以通过http://localhost访问XAMPP欢迎页,通过http://test1.net和http://test2.net访问各自的主页。

#

# Virtual Hosts

#

# If you want to maintain multiple domains/hostnames on your

# machine you can setup VirtualHost containers for them. Most configurations

# use only name-based virtual hosts so the server doesn't need to worry about

# IP addresses. This is indicated by the asterisks in the directives below.

#

# Please see the documentation at

# <URL:http://httpd.apache.org/docs/2.2/vhosts/>

# for further details before you try to setup virtual hosts.

#

# You may use the command line option '-S' to verify your virtual host

# configuration.

#

# Use name-based virtual hosting.

#

NameVirtualHost *:80

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost container.

# The first VirtualHost section is used for all requests that do not

# match a ServerName or ServerAlias in any <VirtualHost>block.

#

<VirtualHost *:80>

ServerAdmin kongdaoxian@gmail.com

DocumentRoot "E:/skydao/apache2/htdocs"

ServerName localhost

ServerAlias www.skydao.com

ErrorLog "logs/localhost-error.log"

CustomLog "logs/localhost-access.log" combined

<Directory "E:/skydao/apache2/htdocs">

order allow,deny

allow from all

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerAdmin kongdaoxian@gmail.com

DocumentRoot "E:/skydao/apache2/htdocs/project1"

ServerName project1.com

ServerAlias www.project1.com

ErrorLog "logs/project1-error.log"

CustomLog "logs/project1-access.log" combined

<Directory "E:/skydao/apache2/htdocs/project1">

order allow,deny

allow from all

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerAdmin kongdaoxian@gmail.com

DocumentRoot "E:/skydao/apache2/htdocs/zendTest/public"

ServerName zendTest.com

ServerAlias www.zendTest.com

DirectoryIndex index.php

<Directory />

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerAdmin kongdaoxian@gmail.com

DocumentRoot "E:/skydao/apache2/htdocs/testRewrite"

ServerName testRewrite.com

ServerAlias www.testRewrite.com

# DirectoryIndex index.php

<Directory />

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

<VirtualHost *:80>

ServerAdmin kongdaoxian@gmail.com

DocumentRoot "E:/skydao/apache2/htdocs/test"

ServerName test.com

ServerAlias www.test.com

ErrorLog "logs/zendTest-error.log"

CustomLog "logs/zendTest-access.log" combined

<Directory "E:/skydao/apache2/htdocs/test">

order allow,deny

allow from all

</Directory>

</VirtualHost>


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/60902.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-27
下一篇2023-02-27

发表评论

登录后才能评论

评论列表(0条)

    保存