`
lovnet
  • 浏览: 6879430 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论
阅读更多

在 drupal 跟目录下有个 .htaccess 文件, 这个文件中就有URL地址重写的配置信息,配置信息如下:

# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# adapt and uncomment the following:
# RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
# RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment and adapt the following:
# RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
# RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
IfModule>

RewriteEngine on
为重写引擎开关,如果设为off,则任何重写规则定义将不被应用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即可,不必将下面一条条的重写规则注释掉。

RewriteCond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则。

RewriteCond 的语法如下:

RewriteCond TestString CondPattern [flags]

TestString

TestString 是一个纯文本的字符串,但是也可以包含一些扩展的成分,这里就是通过 %{NAME_OF_VARIABLE} 引用的服务器变量。

服务器变量:

REQUEST_FILENAME 是与请求相匹配的完整的本地文件系统的文件路径名。

REQUEST_URI 是在HTTP请求行中所请求的资源(比如:"/index.html")。

CondPattern

CondPattern是条件模式,即一个应用于当前TestString实例的正则表达式。TestString将被首先计算,然后再与CondPattern匹配。

比如: RewriteCond %{REQUEST_URI} !=/favicon.ico 的意思就是请求的地址不是 /favicon.ico 才触发下面的地址重写;

! (惊叹号)来指定不匹配。
'-d'(目录) 将TestString视为一个路径名并测试它是否为一个存在的目录。
'-f'(常规文件) 将TestString视为一个路径名并测试它是否为一个存在的常规文件。

所以: RewriteCond %{REQUEST_FILENAME} !-f 的意思为, 请求的文件并不存在时触发后面的地址重写;

RewriteCond %{REQUEST_FILENAME} !-d 的意思为: 请求的目录并不存在时,触发后面的地址重写;

更多这个参数的写法可以参看: http://www.52web.com/52article/?view-258.html

[flags]

我们还可以在CondPattern之后追加特殊的标记[flags]作为RewriteCond指令的第三个参数。flags是一个以逗号分隔的以下标记的列表:

'nocase|NC'(忽略大小写)
它使测试忽略大小写,扩展后的TestString和CondPattern中'A-Z' 和'a-z'是没有区别的。此标记仅用于TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。
'ornext|OR'(或下一条件)
它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:

RewriteRule 具体的重写策略:

RewriteRule的语法如后: RewriteRule Pattern Substitution [flags]

Pattern

对Apache1.2及以后的版本,模板(Pattern)是一个POSIX正则式,用以匹配当前的URL。当前的URL不一定是最初提交的URL,因为可能用一些规则在此规则前已经对URL进行了处理。

这里是 ^(.*)$ ,意味着一行任何的地址请求;

Substitution

当匹配成功后,Substitution会被用来替换相应的匹配。

这里的 RewriteRule ^(.*)$ index.php?q=$1 意味着, 如果原先请求的是 /aaa/ddd 重写后地址变成 index.php?q=/aaa/ddd ;

它除了可以是普通的字符串以外,还可以包括:
1. $N,引用RewriteRule模板中匹配的相关字串,N表示序号,N=0..9
2. %N,引用最后一个RewriteCond模板中匹配的数据,N表示序号
3. %{VARNAME},服务器变量
4. ${mapname:key|default},映射函数调用。

更多信息可以参看:http://www.ixdba.net/article/ae/1443.html

[flags]

作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的标记的列表。

这里的 L,QSA 分别是如下意思:

'last|L' (最后一个规则 last)
立即停止重写操作,并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL('/')为实际存在的URL, 比如, '/e/www/'.

'qsappend|QSA' (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。

比如说我要把 /user/ghj1976 重定向到/user.php?uid=ghj1976 那么我的规则就须这样:
RewriteRule ^user/([^/]+)$ ^/user.php?uid=$2 [L]

但是如果我们希望 /user/ghj1976?key=java 重定向到 /user.php?uid=ghj1976&key=java

写成 RewriteRule ^user/([^/]+)$ ^/user.php?uid=$2 [QSA,L] 这样增加个 QSA 就可以了。

如果没有QSA,就会丢掉我们额外传的这个参数key=java。

更多可以参看: http://space.itpub.net/16555225/viewspace-495945

分享到:
评论

相关推荐

    Apache开启URL重写功能方法.docx

    成熟的Web应用程序如Drupal和Joomla通常会提供预设的`.htaccess`文件,只需在安装后启用URL重写功能即可。 4. **重启Apache服务器**: - 修改配置后,需要重启Apache服务器使改动生效。重启命令会因Linux发行版而...

    drupal 简洁链接解决方案.rar

    接着,在Drupal的根目录下创建或编辑`.htaccess`文件,启用URL重写功能。在`.htaccess`文件中,找到以下行并取消注释: ``` RewriteEngine on RewriteBase / ``` 然后,你需要配置Drupal的站点设置。在...

    在Windows 7上安装Drupal

    安装完成后,配置Apache的配置文件httpd.conf,将ServerRoot指向Apache的安装目录,并启用必要的模块,如mod_rewrite,这对于Drupal的URL重写功能至关重要。 接下来是PHP 5.3.8的安装。PHP是一种服务器端脚本语言,...

    Apache中使非伪静态url跳转到伪静态url的方法

    1. **伪静态URL**:指的是将动态URL通过重写规则转换为静态URL的形式,但实际上是不存在的文件或目录。 2. **非伪静态URL**:通常指带有查询字符串的动态URL,如`/article.php?id=123`。 3. **.htaccess**:是Apache...

    apache2.zip

    5. **URL重写**:通过mod_rewrite模块,Apache2可以实现URL的动态重写,这在实现SEO友好链接或隐藏实际路径时非常有用。 6. **FastCGI和PHP支持**:Apache2可以通过mod_fastcgi和mod_php模块与FastCGI进程管理器...

    apache-2.2.25版

    4. **URL重写**:通过`mod_rewrite`模块,Apache可以进行URL重写,这对于实现SEO友好、简洁的URL结构以及实现URL路由非常有用。 5. **多线程支持**:虽然Apache传统上是以进程模型工作,但在2.2.x系列中,Apache...

    apache_2.2.22

    6. **URL重写**:通过mod_rewrite模块,Apache 2.2.22能实现复杂的URL重写规则,帮助实现SEO友好的URL结构,或者隐藏实际的服务器路径,提升网站的安全性。 7. **动态内容支持**:Apache能够与PHP、Perl、Python等...

    Apache服务器实用大全

    - Apache模块介绍:讲解如何加载和卸载Apache模块,如mod_rewrite用于URL重写,mod_security用于安全防护,mod_deflate用于压缩响应内容等。 - 模块配置示例:提供各种模块的具体配置示例,帮助理解并实际应用。 ...

    drupal7专业开发指南 中文版 word版

    Web 服务器方面,Drupal 最常与 Apache 配合,但也可与其他服务器如 IIS 集成,利用 .htaccess 文件进行安全配置和 Clean URL 功能。Clean URL 是通过服务器的 URL 重写机制实现,使得 URL 更加人性化和易于记忆。 ...

    apache_2.2.25.zip

    例如,`mod_rewrite`模块用于URL重写,这对于实现SEO友好的动态网站或者进行路径隐藏非常有用;`mod_security`则可以增强服务器的安全性,防止SQL注入和跨站脚本攻击等;`mod_proxy`则支持代理服务,可以实现负载...

    Apache中文文档

    例如,`mod_rewrite`模块用于URL重写,可以帮助实现动态URL到静态URL的转换,提高SEO效果;`mod_security`则提供了Web应用防火墙功能,增强服务器安全性;还有`mod_proxy`用于代理服务,可以实现负载均衡和反向代理...

    PHP MySQL Apache超强组合

    Apache还支持URL重写、虚拟主机和HTTPS加密通信等功能,为网站提供灵活的配置和安全保护。 **PHP MySQL Apache的集成** 当这三者结合时,Apache作为Web服务器接收用户请求,解析其中的PHP代码,并通过mod_php模块将...

    apache_2.0.59,window环境

    3. **模块化设计**:Apache采用模块化结构,可以根据需要加载或卸载不同的功能模块,如mod_rewrite用于URL重写,mod_security用于增强安全性。 4. **虚拟主机**:Apache支持在同一台服务器上设置多个独立的域名,每...

    apache_2.4.4-x64-openssl-1.0.1.rar

    2. **模块管理**:Apache通过模块来扩展其功能,如mod_rewrite用于URL重写,mod_ssl用于SSL/TLS支持。在`httpd.conf`中,可以启用或禁用相应的模块。 3. **虚拟主机**:Apache支持多站点配置,通过虚拟主机功能可以...

    apache2.2.26

    3. `modules`子目录:包含Apache服务器的模块,如mod_php,用于处理PHP脚本,以及mod_rewrite,用于URL重写。 4. `logs`子目录:存放服务器日志文件,如访问日志(access_log)和错误日志(error_log)。 5. `htdocs...

    apache_2.0.50-win32

    - **URL重写**:通过mod_rewrite模块,Apache可以进行复杂的URL重写规则,优化SEO并实现动态网址静态化。 - **安全性增强**:2.0.x系列增强了安全特性,包括改进的认证机制和对HTTP/1.1安全标准的支持。 2. **...

    学习Apache【学习一族】

    Apache通过配置文件(httpd.conf)来定义服务器的行为,这些配置可以定制服务器的响应方式,例如设置虚拟主机、重定向、URL重写等。 二、安装与配置Apache 1. 安装:在不同的操作系统上安装Apache的方法略有不同。...

    Apache2.4 64位版

    1. **模块化设计**:Apache2.4的核心结构基于模块化,允许用户根据需求自由添加或移除功能模块,如HTTP/2支持、SSL/TLS加密、URL重写等。 2. **性能提升**:通过改进多路复用和并发处理,提高了服务器响应速度和吞吐...

    Apache2.4 for Windows x86

    1. **模块化设计**:Apache2.4采用模块化结构,可以根据需求选择加载必要的模块,如mod_rewrite(URL重写)、mod_deflate(内容压缩)和mod_ssl(HTTPS支持)等。 2. **事件模型**:提供多路复用的事件模型,提高了...

Global site tag (gtag.js) - Google Analytics