例如:
http://www.example.com/index.php?arg1=val1&arg2/
?
指定GET值的开头,但尾随/
对网址有什么意义吗?
我问的原因是因为这是我第一次在我的网站上尝试过,而我所有内部链接到CSS,图像等(这些都是当前目录的相关链接)都没有工作,所以我需要提供完整的路径让他们工作,以防用户键入一个尾随/
的网址。
我正在考虑编写重写规则以将index.php/
映射到index.php
。这有什么问题吗?另外,有没有办法将其概括为将anything.php/
映射到anything.php
?
服务器是Apache 2.4。
答案 0 :(得分:1)
有些人使用尾部斜杠来表明网址指向(例如)文件夹。
如果要指向文件,请不要使用尾部斜杠。
当有斜杠(指向文件夹时)时,某些服务器会更快。但这取决于实施。
答案 1 :(得分:1)
Laokoon的回答是正确的,但这是关于在URL的"/"
部分末尾有"path"
(正斜杠),例如:
http://www.example.com/
http://www.example.com/folder/
您在问题中描述的内容是在网址的"/"
部分中显示"query"
。{/ p>
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,因此我将提供一个PHP示例。在其他语言中可能会有不同的处理方式,例如"Perl"
。
"/"
中有两种可能的尾随"query"
:
1)如果跟踪"/"
跟在"="
后面,而中间没有"&"
,则跟踪"/"
是"value"
的{{1}}的一部分与"key"
相关联的"="
:
"?arg1=val1/" $_GET["arg1"] => 'val1/'
"?arg1=/" $_GET["arg1"] => '/'
2)如果"/"
跟在"&"
(或"?"
)之后,中间没有"="
,那么"/"
就是名称的一部分一个"key"
。此外,如果"/"
位于最后(尾随),那么"value"
的{{1}}将为空:
"key"
如果跟踪 "?arg1/=val1" $_GET["arg1/"] => 'val1'
"?arg1=val1&arg2/=val2" $_GET["arg2/"] => 'val2'
"?arg1/" $_GET["arg1/"] => ''
"?arg1=val1&arg2/" $_GET["arg2/"] => ''
跟随"/"
(或"&"
),则跟踪"?"
是 "/"
的名称:
"key"
这是 PhpFiddle 示例:querytest2016-0713.php
"?/" $_GET["/"] => ''
"?arg1=val1&/" $_GET["/"] => ''
示例输出:
querytest2016-0713.php?arg1=val1&arg2/
<?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?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?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/ => ''
当然,如果查询字符串是&#34;手动&#34;使用其他一些编码方法在PHP中解析,然后尾随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/ => ''
可能有其他一些含义或目的,或者它可能完全被忽略。