[英]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.