试图解释mod_rewrite - 可以使用一些信息

时间:2012-12-26 19:37:53

标签: apache .htaccess mod-rewrite

好的,我对mod_rewrite并不感到惊讶。我想要变得更好 - 但有时候读起来有点困难。

无论如何,我正在尝试为客户端设置测试站点,并移动他们当前的实时站点。我一直在阅读mod_rewrite,但很难找到一个易于理解的来源。

他们有一个相当广泛的.htaccess文件。

例如:

RewriteCond %{HTTP_HOST} ^clientdomain\.com
RewriteCond %{HTTPS} =on
RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]

我读这个的方式是 -

如果域名以clientdomain.com开头,则重定向到启用了HTTPS的服务器 - 我是否正确阅读?

接下来是:

RewriteCond %{HTTP_HOST} ^(.*)clientdomain2.COM [NC]
RewriteRule ^(.*)$ clientdomain/template.php?pid=49 [R,L]

据我所知,这表示如果域名是clientdomain2.com,要指向clientdomain并转到带有GID参数pid = 49的template.php页面 - 是否正确?

最后,我毫不知道这意味着什么:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|/[^.]*)$  [NC]
RewriteRule ^(.*)(/|\.php|\.html|\.htm)*$ index.php?phpinc=$1 [QSA]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

看起来第一部分正在剥离任何和所有.php,.htm和.html - 正确吗?

对此有任何建议,或者对mod_rewrite易于理解的处理来源非常欢迎

1 个答案:

答案 0 :(得分:1)

  

如果域名以clientdomain.com开头,则重定向到启用了HTTPS的服务器 - 我是否正确阅读?

几乎应该阅读:

“如果域名以clientdomain.com AND 开头,请求是HTTPS请求,则302重定向到ServerName指令定义的服务器(可能在vhost配置中)但是前面有一个www.,并且使用相同的请求并使用HTTPS。“

  

据我所知,这表示如果域名是clientdomain2.com,要指向clientdomain并转到带有GID参数pid = 49的template.php页面 - 是否正确?

不,这会检查其中包含clientdomain2.COM,不区分大小写(NC标志)的任何内容,并且302会将其重定向到相同的主机和协议以及URI /clientdomain/template.php?pid=49。因为它不包含协议和主机名(例如http://clientdomain2.com/),所以它将重定向到与请求相同的主机和协议,只有URI更改。示例:请求适用于http://www.clientdomain2.com/something/foo,重定向发送到http://www.clientdomain2.com/clientdomain/template.php?pid=49

  

看起来第一部分正在剥离任何和所有.php,.htm和.html - 正确吗?

这是一种“路由”类型的规则。 重定向规则后,这些规则通常是,因为它有点全面。它说:

  1. 请求不适用于现有文件
  2. 请求不适用于现有目录
  3. 请求的URI不以/index.php
  4. 开头
  5. 请求的URI以以下扩展名之一结尾(不区分大小写,NC标记):phphtmlhtm或请求的URI只是{ {1}},或者请求的URI根本没有扩展名(/表达式)。看起来这种情况是为了防止将规则应用于脚本,图像,CSS样式等内容。
  6. 如果满足条件1-4,则在内部将请求(如果存在的话没有任何扩展名)重写为/[^.]*,并使用名为/index.php的查询字符串参数和所请求的URI的值(sans)扩展)。任何现有的查询字符串参数都附加到末尾(phpinc标志)。
  7. 最后一条规则是将环境变量QSA设置为HTTP_AUTHORIZATION标头中的任何内容。这可以通过php脚本中的Authorization变量获取。