繁体   English   中英

htaccess +正则表达式; 发送变量+网址重写

[英]htaccess + regex; sending variables + url rewrite

我有点在训练自己的htacces + regex技能,在理论上学习了大约一两个月,并且想在实践中试一试。

所以事情是我有一个名为index.php的文件,其中包含以下代码:

<html>
    <head>
    </head>
    <body>
        <a href="2var.php?var1=one&var2=two">2var test</a><!--2var.php/one/two-->
    </body>
</html>

第二个文件名为2var.php,具有以下代码:

<?php

if($_GET["var1"] && $_GET["var2"])
{
    echo "both rechead";
}
else
{
    if($_GET["var1"] || $_GET["var2"])
        echo "one of them reached";
    else
        echo "neither reached";
}
?>

因此,我想做的是测试我是否可以同时发送变量和编辑url(我一直在阅读,这是可能的,而这恰恰是“幕后”)。 但是我无法获得正确的思维方式或专业知识来完成此任务。

顺便说一句,htacces:

DirectoryIndex index.html index.php
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^\/?([a-z]+)\/([a-z]+).html$ 2var.php?var1=$1&var2=$2

我的意思是这样做2var.php / one / two ,并且变量实际上已传递。 现在我只收到“都没有到达”;

编辑:我在localhost中,所以该漏洞链接是localhost / tests / index.php || 本地主机/测试/ var2.php?VAR1 = $ 1 VAR2 = $ 16

您说过要捕获2var.php/one/two

事实是2var.php已经是一个PHP脚本,因此您实际上并不需要RewriteEngine。 如果您尝试在禁用RewriteEngine及其规则的情况下访问脚本,它将可以正常工作,但是会产生有关未定义索引var1警告。

这是因为/one/two部分在$_GET不可访问。 而是将其存储在名为$_SERVER['PATH_INFO']变量中。

一个示例-访问/test/2var.php/one/two类的URL,同时使2var.php包含以下内容:

<?php
var_dump($_SERVER['PATH_INFO']);

将输出以下内容:

string(8) "/one/two" 

您可以在脚本本身中使用正则表达式对此进行解析。


关于实际的.htaccess规则 您几乎正确了。 但是,您从^开始,这使URL完全以/one/two.html形式匹配字符串。 由于这些匹配是针对完整的请求URI进行的,因此请尝试看看如果将^替换为2var.php并删除.html部分,会发生什么情况,以便您的RewriteRule如下所示:

RewriteRule 2var.php\/?([a-z]+)\/([a-z]+)$ 2var.php?var1=$1&var2=$2

注意缺少^ 这意味着您可以将2var放在服务器上的任何目录中,并且仍然可以使用。


另外,我注意到您链接到<a href="2var.php?var1=one&var2=two"> 拥有重写规则的目的是使URL美观,因此您可以直接链接到<a href="2var.php/one/two"> (或您想要的任何其他语法)。 只要您使用适当的重写规则备份它们,重写引擎就会处理到达这些地址的请求,并将此类请求分派到最终脚本中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM