【发布时间】:2016-02-22 12:43:18
【问题描述】:
我的任务是帮助为一个面向外部的网站提供基础设施,一切都很好,它已经部署,木偶控制和我的标准等。
但是,这变得很棘手,因为我们是由外部开发人员提供的网站代码,他们很快注意到“重写不起作用” 我花了一些时间对此进行了检查,并使用 .htaccess 文件为 apache 重写确实运行良好。 它失败的地方是在重写操作期间没有传递或解释php变量 我发布了一个先前的 stackoverflow 问题,其中包含非常详细的信息,并且从那时起大大简化了我的示例。
My mod_rewrite rules do not resolve PHP variables
没有人能够在我之前的帖子中确定问题,所以我已经稍微简化了我的案例以进行测试。
我的基本故障排除 .htaccess 文件在这里
<ifModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^test/test2/$ test.php?var=test2&var2=test [L]
RewriteRule ^hello.html redir.html [L]
</ifModule>
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
访问时 http://server.example.net/hello.html 我被正确地带到了我的 redir.html 页面。所以我知道重写工作,我也通过跟踪日志文件来确认这一点。 现在的问题是,当我运行以下内容时
http://server.example.net/test/test2/
它应该重定向到我的 test.php 文件
http-//server.example.net/test.php?var=test2&var2=test 这是一个非常基本的文件
<?php
echo $_GET['var'].'aa'.$_GET['var2'];
?>
现在如果我浏览到该位置而不使用重写,我会得到如下的 html 页面
test2aatest
显示正在解析并显示在页面上的 2 个变量。但是,如果我使用使用重写的 url 访问
http-//server.example.net/test/test2/
然后我得到以下内容
Notice: Undefined index: var in /var/www/itnews/test.php on line 4
Notice: Undefined index: var2 in /var/www/itnews/test.php on line 4
aa
这告诉我我被正确地重定向到页面,但是变量有问题。 如果有帮助 操作系统 - Centos 7 x64 和所有最新更新
php packages
php.x86_64 5.4.16-36.el7_1 @base
php-cli.x86_64 5.4.16-36.el7_1 @base
php-common.x86_64 5.4.16-36.el7_1 @base
php-gd.x86_64 5.4.16-36.el7_1 @base
php-mbstring.x86_64 5.4.16-36.el7_1 @base
php-mysql.x86_64 5.4.16-36.el7_1 @base
php-pdo.x86_64 5.4.16-36.el7_1 @base
php-snmp.x86_64 5.4.16-36.el7_1 @base
阿帕奇
httpd.x86_64 2.4.6-40.el7.centos @base
httpd-tools.x86_64 2.4.6-40.el7.centos @base
最后,我的重写日志。
[Mon Feb 22 13:10:16.901115 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test.php -> /var/www/itnews/test.php/test2/
[Mon Feb 22 13:10:16.901131 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test.php/test2/ -> test.php/test2/
[Mon Feb 22 13:10:16.901135 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] applying pattern '^test/test2/$' to uri 'test.php/test2/'
[Mon Feb 22 13:10:16.901140 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test.php -> /var/www/itnews/test.php/test2/
[Mon Feb 22 13:10:16.901144 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test.php/test2/ -> test.php/test2/
[Mon Feb 22 13:10:16.901147 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] applying pattern '^hello.html' to uri 'test.php/test2/'
[Mon Feb 22 13:10:16.901156 2016] [rewrite:trace1] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffef2d0/subreq] [perdir /var/www/itnews/] pass through /var/www/itnews/test.php
[Mon Feb 22 13:10:16.901241 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test.php -> /var/www/itnews/test.php/test2/
[Mon Feb 22 13:10:16.901251 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test.php/test2/ -> test.php/test2/
[Mon Feb 22 13:10:16.901255 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] applying pattern '^test/test2/$' to uri 'test.php/test2/'
[Mon Feb 22 13:10:16.901274 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test.php -> /var/www/itnews/test.php/test2/
[Mon Feb 22 13:10:16.901279 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test.php/test2/ -> test.php/test2/
[Mon Feb 22 13:10:16.901282 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] applying pattern '^hello.html' to uri 'test.php/test2/'
[Mon Feb 22 13:10:16.901286 2016] [rewrite:trace1] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffdd240/initial] [perdir /var/www/itnews/] pass through /var/www/itnews/test.php
[Mon Feb 22 13:10:16.901375 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test2 -> /var/www/itnews/test2/
[Mon Feb 22 13:10:16.901387 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test2/ -> test2/
[Mon Feb 22 13:10:16.901391 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] applying pattern '^test/test2/$' to uri 'test2/'
[Mon Feb 22 13:10:16.901395 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] add path info postfix: /var/www/itnews/test2 -> /var/www/itnews/test2/
[Mon Feb 22 13:10:16.901401 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] strip per-dir prefix: /var/www/itnews/test2/ -> test2/
[Mon Feb 22 13:10:16.901405 2016] [rewrite:trace3] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] applying pattern '^hello.html' to uri 'test2/'
[Mon Feb 22 13:10:16.901408 2016] [rewrite:trace1] [pid 29768] mod_rewrite.c(468): [client 192.168.0.55:65280] 192.168.0.55 - - [server.example.net/sid#7f8f6fceb9c0][rid#7f8f6ffe7290/subreq] [perdir /var/www/itnews/] pass through /var/www/itnews/test2
注意,我在 ops,我对 php 不熟悉,所以我正在研究关于 php 是如何工作的二手信息。
【问题讨论】:
标签: php apache .htaccess mod-rewrite url-rewriting