2014-10-20 70 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