2014-10-20 92 views
0

我有点训练我的htacces +正则表达式技能,一直在理论上学习一两个月,并且想在实践中给它一个镜头。htaccess + regex;发送变量+ url重写

所以事情是我有一个用下面的代码名为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"; 
} 
?> 

所以,我想要做的是测试我是否可以同时发送变量和编辑网址(我一直在阅读,这是可能的,这正是幕后的事情)。但是我无法得到正确的思维方式或专业知识来实现​​这一点。

顺便说一句,htacces:

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

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

我的观点是这样做2var.php /一/二和变量实际上传递。现在我只收到“没有达到”;

编辑:我在本地主机,所以洞链接是localhost/tests/index.php || localhost/tests/var2.php?var1 = $ 1 & var2 = $ 2

+1

出于好奇,如何在不写一行代码的情况下研究一个月的编程/脚本材料? – 2014-10-20 19:52:26

+0

'我的观点是做这个2var.php/one/two'你写的是'/ one/two.html' – Cheery 2014-10-20 19:53:03

+1

@ rr-因为我有点忙碌的生活(不是自大的方式,只是为了做),并且我在用手机上的应用程序学习了buss/metro。我可以PHP/CSS/HTML/JS/JQUERY,但我想学更多的东西,所以我会尽我所能。题外话btw – Sashka 2014-10-20 19:54:53

回答

1

你说你要赶上2var.php/one/two

事情是,2var.php已经是一个PHP脚本,它碰巧你并不需要RewriteEngine这个。如果您尝试使用RewriteEngine访问您的脚本并禁用其规则,它将会正常工作,但会产生有关未定义索引的警告:var1

这是因为在$_GET/one/two部分不可访问。而是将其存储在名为$_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 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">,而不是(或者你想要的任何其他语法)。只要您使用适当的重写规则备份它们,重写引擎就会处理到达这些地址的请求,并将这些请求发送到您的最终脚本。

+0

创建href。因此,我似乎错过了使用^ $的一些信息。所以一般来说,我们可以说这是一个愚蠢的问题,就像你说的,var2.php已经是一个脚本 – Sashka 2014-10-21 09:02:08