2014-02-09 80 views
1

例如:尾隨的「正斜槓」在URL中有任何意義嗎?

http://www.example.com/index.php?arg1=val1&arg2/ 

?指定GET值的開始,但後/有任何意義的網址是什麼?

我問的原因是因爲這是我第一次在我的網站上試過它,並且我所有的CSS,圖像等內部鏈接(這些都是與當前目錄相關的鏈接) t工作,所以我需要提供完整的路徑讓他們工作,以防萬一用戶鍵入一個尾隨/的URL。

我想編寫一個重寫規則映射index.php/index.php的。這有什麼問題嗎?另外,是否有一種方法可以將此映射爲anything.php/anything.php

服務器是Apache 2.4。

回答

1

有些人使用尾部斜線來表明url指向(例如)一個文件夾。

當你想指向一個文件,不使用斜線。

某些服務器更快時,有一個拖尾斜槓(指向文件夾時)。但這取決於實施。

+0

這就是「技術」含義,雖然不一定是「目錄」或「文件」,但URI的不同部分。在功能上,它們通常是相同的,除非你有一些時髦的重寫規則關注尾部斜線。 –

+0

是的,你是對的。我寫得更清楚。 – Laokoon

+0

拖尾的反斜槓? – Gumbo

1

Laokoon的答案是正確的,但也僅在URL的"path"部分的結尾具有後"/"(正斜槓),如:

http://www.example.com/ 
http://www.example.com/folder/ 

你在你的問題已經描述是有一個在"query"部分URL中跟蹤"/"

Parts of the URL: "http://www.example.com/index.php?arg1=val1&arg2/" 
http    Protocol 
www.example.com Subdomain.Domain 
index.php   Path 
?arg1=val1&arg2/ Query 

在你描述的情況:"http://www.example.com/index.php?arg1=val1&arg2/",尾隨"/"確實有一個意思,但也許不是,你也許會覺得礙事。

您已將您的問題標記爲,因此我將提供一個PHP示例。在其他語言中可能會有所不同,例如"Perl"

有2種可能性用於在拖尾"/""query"

1)如果尾隨"/"遵循"=",而不在它們之間的"&",那麼所述後"/""key"與相關聯的"value"的一部分所述"="

"?arg1=val1/"   $_GET["arg1"] => 'val1/' 
    "?arg1=/"    $_GET["arg1"] => '/' 

2)如果"/"遵循"&"(或"?")中,用在之間出"=",那麼"/""key"的名稱的一部分。此外,如果"/"是在最後(後),則該"key""value"將是空的:

"?arg1/=val1"   $_GET["arg1/"] => 'val1' 
    "?arg1=val1&arg2/=val2" $_GET["arg2/"] => 'val2' 
    "?arg1/"     $_GET["arg1/"] => '' 
    "?arg1=val1&arg2/"  $_GET["arg2/"] => '' 

如果尾隨"/"立即遵循"&"(或"?"),則尾隨"/"一個"key"的名稱:

"?/"      $_GET["/"] => '' 
    "?arg1=val1&/"   $_GET["/"] => '' 

這裏是一個PhpFiddle例如:querytest2016-0713.php

<?php 

// http://main.xfiddle.com/55edba50/querytrailingslashtest/querytest2016-0713.php 
echo "querytest2016-0713.php<br>\n"; 

echo 'HTTP_HOST ="'  . $_SERVER['HTTP_HOST'] . '"' . "<br>\n"; 
echo 'REQUEST_URI ="' . $_SERVER['REQUEST_URI'] . '"' . "<br>\n"; 
echo 'QUERY_STRING ="' . $_SERVER['QUERY_STRING'] . '"' . "<br>\n"; 
echo "<br>\n"; 
echo "Test using 'parse_url' and 'parse_str':<br>\n"; 

// $url = "http://www.example.com/index.php?arg1=val1&arg2/"; 
$url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

$qry = parse_url($url, PHP_URL_QUERY); 
parse_str($qry); 
parse_str($qry, $arr); 

echo "url='" . $url . "'<br>\n"; 
echo "query='" . $qry . "'<br>\n"; 

foreach ($arr as $key => $value) { 
    echo $key . " => '" . $value . "'<br>\n"; 
} 

echo "<br>\n"; 
echo "Test using '\$_GET':<br>\n"; 

foreach($_GET as $key => $value){ 
    echo $key . " => '" . $value . "'<br />\r\n"; 
} 

?> 

輸出示例:
querytest2016-0713.php?arg1=val1&arg2/

querytest2016-0713.php 
HTTP_HOST ="main.xfiddle.com" 
REQUEST_URI ="/55edba50/querytrailingslashtest/querytest2016-0713.php?arg1=val1&arg2/" 
QUERY_STRING ="arg1=val1&arg2/" 

Test using 'parse_url' and 'parse_str': 
url='http://main.xfiddle.com/55edba50/querytrailingslashtest/ ... 
    ... querytest2016-0713.php?arg1=val1&arg2/' 
query='arg1=val1&arg2/' 
arg1 => 'val1' 
arg2/ => '' 

Test using '$_GET': 
arg1 => 'val1' 
arg2/ => '' 

輸出示例:
querytest2016-0713.php?a=111&b=999&c=13579&arg1=901&arg2/=44&argx&whatever/=88&arg3/

querytest2016-0713.php 
HTTP_HOST ="main.xfiddle.com" 
REQUEST_URI ="/55edba50/querytrailingslashtest/querytest2016-0713.php?a=111&b=999&c=13579&arg1=901&arg2/=44&argx&whatever/=88&arg3/" 
QUERY_STRING ="a=111&b=999&c=13579&arg1=901&arg2/=44&argx&whatever/=88&arg3/" 

Test using 'parse_url' and 'parse_str': 
url='http://main.xfiddle.com/55edba50/querytrailingslashtest/ ... 
    ... querytest2016-0713.php?a=111&b=999&c=13579&arg1=901&arg2/=44&argx&whatever/=88&arg3/' 
query='a=111&b=999&c=13579&arg1=901&arg2/=44&argx&whatever/=88&arg3/' 
a => '111' 
b => '999' 
c => '13579' 
arg1 => '901' 
arg2/ => '44' 
argx => '' 
whatever/ => '88' 
arg3/ => '' 

Test using '$_GET': 
a => '111' 
b => '999' 
c => '13579' 
arg1 => '901' 
arg2/ => '44' 
argx => '' 
whatever/ => '88' 
arg3/ => '' 

當然,如果查詢字符串是使用某種其他編碼方法在PHP中「手動」解析的,則尾部"/"可能具有其他含義或目的,或者可能完全忽略它。