Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 试图解释mod_rewrite-可能需要一些信息_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache 试图解释mod_rewrite-可能需要一些信息

Apache 试图解释mod_rewrite-可能需要一些信息,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,好吧,我对mod_重写并不感到惊讶。我正在努力变得更好,但有时阅读起来有点困难 无论如何,我正在尝试为客户机设置一个测试站点,并移动到他们当前的实时站点。我一直在读mod_rewrite,但很难找到一个易于理解的源代码 他们有一个相当广泛的.htaccess文件 例如: RewriteCond %{HTTP_HOST} ^clientdomain\.com RewriteCond %{HTTPS} =on RewriteRule .* https://www.%{SERVER_NAME}%{RE

好吧,我对mod_重写并不感到惊讶。我正在努力变得更好,但有时阅读起来有点困难

无论如何,我正在尝试为客户机设置一个测试站点,并移动到他们当前的实时站点。我一直在读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并转到template.php页面,GET参数为pid=49-正确吗

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

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_重写的易于理解的处理方法的资料都是非常受欢迎的

如果域以clientdomain.com开头,请重定向到启用HTTPS的服务器-我读得正确吗

几乎可以这样理解:

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

据我所知,这表明,如果域是clientdomain2.com,则指向clientdomain并转到template.php页面,GET参数为pid=49-正确吗

否,这将检查其中是否有
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,对吗

这是一种“路由”类型的规则。这些规则通常在重定向规则之后,因为这是一种包罗万象的规则。它说:

  • 该请求不适用于现有文件
  • 请求不针对现有目录
  • 请求的URI不是以
    /index.php
  • 请求的URI以以下扩展之一结尾(不区分大小写,
    NC
    标志):
    php
    html
    htm
    ,或者请求的URI只是
    /
    ,或者请求的URI根本没有扩展(
    /[^.]*
    表达式)。看起来这个条件是为了防止规则应用于脚本、图像、css样式等
  • 如果满足条件1-4,则在内部将请求重写为
    /index.php
    ,其中使用名为
    phpinc的查询字符串参数以及请求的URI(sans扩展名)的值。任何现有的查询字符串参数都会追加到末尾(
    QSA
    flag)
  • 最后一条规则是将环境变量
    HTTP\u AUTHORIZATION
    设置为
    AUTHORIZATION
    标题中的任何内容。这是通过php脚本中的
    $\u服务器
    变量获取的

    如果域以clientdomain.com开头,请重定向到启用HTTPS的服务器-我读得正确吗

    几乎可以这样理解:

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

    据我所知,这表明,如果域是clientdomain2.com,则指向clientdomain并转到template.php页面,GET参数为pid=49-正确吗

    否,这将检查其中是否有
    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,对吗

    这是一种“路由”类型的规则。这些规则通常在重定向规则之后,因为这是一种包罗万象的规则。它说:

  • 该请求不适用于现有文件
  • 请求不针对现有目录
  • 请求的URI不是以
    /index.php
  • 请求的URI以以下扩展之一结尾(不区分大小写,
    NC
    标志):
    php
    html
    htm
    ,或者请求的URI只是
    /
    ,或者请求的URI根本没有扩展(
    /[^.]*
    表达式)。看起来这个条件是为了防止规则应用于脚本、图像、css样式等
  • 如果满足条件1-4,则使用名为