注意:此处使用的URL,代码仅用于演示我的示例。
我已经看到,对于 HTTP GET
请求,如果您想传递一个值用于决策,那么由于某些原因,它不会通过查询字符串参数传递。
允许'说有一个缩略图显示houston
位置的书店,比如" ABC Bookstore
"
该图像的href
属性假设如下
domain.com/texas/abcbookstore-houston
这就是所需要的,该页面显示了书店的详细信息,相反的网址显示为domain.com/texas/details.php?id=1
问题:
有关如何分析URL以获取密钥的任何想法?当我查看Chrome的“网络”标签时,有一个网站显示
Request Headers
:authority:www.domain.com
:method:GET
:path:/texas/abcbookstore-houston
我的想法:
我可以在解析完整的网址后提取最后一个单词,然后我得到abcbookstore-houston
'
我试过的代码:
$url = "domain.com/texas/abcbookstore-houston";
$path = parse_url($url, PHP_URL_PATH);
//echo $path;//// prints "/texas/abcbookstore-houston"
$parts = explode('/', rtrim($path, '/'));
$id_str = array_pop($parts);
echo $id_str; // prints abcbookstore-houston
我的想法是,我们可以在主bookstore
表格中再添加一列名为' nameofid
'并且查询将获取' id
'他们的nameofid
'火柴。
在这种情况下,nameofid
是" abcbookstore-houston
"。
汇总问题:这是正确的做法吗?我已经看到,在许多网站中,即使这是一个GET
请求,它们也不再传递查询参数,而是像这个用例一样看起来很干净。
答案 0 :(得分:2)
正如 @charlietfl 所提到的,我实际上是在查看简洁网址,也称为漂亮网址
这是实际的书店详细信息页面
http://www.domain.com/texas/details.php?id=1
基本上应该是
http://www.domain.com/texas/details.php?id=abcbookstore-houston
我希望它在地址栏中显示为
http://www.domain.com/texas/abcbookstore-houston
最后,我通过在.htaccess
文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:texas/)?([^/]+)/?$ details.php?id=$1 [NC,L,QSA]
最终命令可以替换为
RewriteRule ^texas/([^/]+)/?$ details.php?id=$1 [NC,L,QSA]
如果“texas
”是必需而不是可选。
所以这里实际发生的是当我搜索此网址http://www.domain.com/texas/abcbookstore-houston
时,服务器实际路由到http://www.domain.com/texas/details.php?id=abcbookstore-houston
,而我们在地址栏中只看到http://www.domain.com/texas/abcbookstore-houston
。
因此,在details.php
内,我们可以使用id
获取$_GET["id"]
并继续我们的业务逻辑。
附加说明:
如果目标是http://www.domain.com/abcbookstore-houston
然后RewriteRule将是
RewriteRule ^([^/]+)/?$ details.php?id=$1 [L,QSA]
以下是有关所用命令的更多解释
RewriteEngine On
启动引擎。
RewriteCond %{REQUEST_FILENAME} !-f
不会重写任何内容,并且是文件。
RewriteCond %{REQUEST_FILENAME} !-d
不会重写任何内容,并且是目录。
RewriteRule ^([^/]+)/?$ details.php?id=$1 [L,QSA]
这是实际的重写规则。它需要在域名之后的任何内容(除正斜杠之外的任何内容),并将其重写为details.php
,并将其作为id
参数传递。
RewriteRule ^texas/([^/]+)/?$ details.php?id=$1 [NC,L,QSA]
这是实际的重写规则。在{域名后跟字符串'texas
'}(除正斜杠之外的任何内容)之后需要执行任何操作,并将其重写为details.php
,并将其作为id
参数传递。< / p>
注意:
此用例abcbookstore-houston
中使用的单词的技术术语是 slug
https://en.wikipedia.org/wiki/Semantic_URL#Slug
slug是URL的一部分,它使用人类可读的关键字标识页面。
为了使用户更容易输入网址,通常会使用特殊字符 删除或替换。例如,重音字符是 通常用英文字母表中的字母代替;标点 标记通常被删除;和空格(必须编码为 %20或+)由短划线( - )或下划线(_)代替,它们是 更美观。