好的,我对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易于理解的处理来源非常欢迎
答案 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 - 正确吗?
这是一种“路由”类型的规则。 重定向规则后,这些规则通常是,因为它有点全面。它说:
/index.php
NC
标记):php
,html
,htm
或请求的URI只是{ {1}},或者请求的URI根本没有扩展名(/
表达式)。看起来这种情况是为了防止将规则应用于脚本,图像,CSS样式等内容。/[^.]*
,并使用名为/index.php
的查询字符串参数和所请求的URI的值(sans)扩展)。任何现有的查询字符串参数都附加到末尾(phpinc
标志)。最后一条规则是将环境变量QSA
设置为HTTP_AUTHORIZATION
标头中的任何内容。这可以通过php脚本中的Authorization
变量获取。