file - 我有时会在网站网址中看到什么不寻常的东西?
问题描述
抱歉,我真的不知道如何表达标题,但这一直困扰着我多年。我一直想知道有时您会如何在网站上看到奇怪的 url 结构。以 youtube 为例:
youtube.com/c/this_persons_channel
我只是不明白它是如何工作的!我知道 / 表示它是网站内的一个文件夹,但它是如何结束的。是文件吗?如果是这样,文件类型在哪里?这个文件是由代码制成的吗?因为它是针对特定用户的。当他们制作网站时,它不可能在那里。
如果这是一个愚蠢的问题,我很抱歉,但我不知道要搜索什么来了解更多信息。
解决方案
我认为您在谈论的是重写网址。这可以在.htaccess
您的项目文件中完成。
url 的结尾不是文件或文件夹。它是一个查询字符串。可以通过代码访问并用于自定义页面。获取这个问题的 url:
https://stackoverflow.com/questions/69684211/what-is-the-unusual-thing-that-i-sometimes-see-in-website-urls
这也可以表示为:
https://stackoverflow.com/questions?id=69684211&name=what-is-the-unusual-thing-that-i-sometimes-see-in-website-urls
注意:这些可能不是查询字符串的实际名称,只是一个示例。
通过写作:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^index/([0-9]+) index.html?id=$1 [NC,L]
在.htaccess
文件中,可以转url
http://localhost/index.php?id=5
进入
http://localhost/index/5
注意:这不会在您刷新页面时简单地更改 url。但是,如果我输入“http://localhost/index/5”,它会给我与输入“http://localhost/index.php?id=5”相同的页面。因此,您必须将到该页面的所有重定向更改为首选 url。这段代码所做的只是让它不会将您发送到 404 错误页面。如果您愿意,您可能可以编写一些 php 代码,如果您在原始 url 上自动重定向您。
网站这样做有几个原因:
- 使 url 更容易记住,更容易编写,
- 使搜索引擎更容易找到该网站。
解释 .htaccess 代码
一旦你理解了代码的含义,它实际上是相当简单的。
第 1 行:
RewriteEngine on
通过将此设置为打开,它允许您重写并为 url 制定自己的规则。
什么是重写引擎?
第 2 行:
RewriteCond %{REQUEST_FILENAME} !-d
这一行是一个条件,有点像 if 语句,它表示如果请求的文件名不是目录,则继续执行代码。这是为了防止文件与文件夹同名并且在 url 中容易混淆的问题。
第 3 行:
RewriteCond %{REQUEST_FILENAME}\.php -f
此行检查请求的文件是否具有扩展名 'php' 它不一定是 php,它可以是任何你想要的。
有关 .htaccess 规则和条件的更多信息:.htaccess 重写规则
第 4 行:
RewriteRule ^index/([0-9a-zA-Z_-]+) index.php?id=$1 [NC,L]
好的,这是最令人困惑的一行。它基本上描述了将 url 更改为的规则。
开头的 '^' 表示忽略 url 之后的任何内容。所以它会忽略url中'index'之前的任何内容。
现在您要设置index/
在 url 和下一个 '/' 之间允许使用哪些字符的规则。如果您在 url 中只有一个查询,则不必担心在末尾添加另一个“/”。但是,如果您有一个?name
参数,https://localhost/index/5/charlie
例如 url。但是因为我有两个搜索参数,所以我必须添加另一个正则表达式。所以最后一行现在变成RewriteRule ^index/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) index.php?id=$1 [NC,L]
在此示例中,它允许 0-9、az(小写和大写)以及下划线和连字符的所有字符。因此,只有当它包含这些字符时,它才会重写 url。例如,如果它包含一个美元符号$
,那么它就不会重写。
确保在右方括号后包含 +!如果没有 + 最后,它只允许 1 个字符值。所以?id=5
会起作用,但?id=52
不会起作用。但是有了 + 就可以了。
现在,该行的下一部分是告诉服务器您要在 url 中重定向到什么。在这种情况下,您想重定向到,index.php
所以您写了那个。
您还希望包含参数,以便您可以在代码中实际使用它们。所以现在添加查询字符串/s。但是我们不知道?id
参数是什么。所以我们需要在那里放置一个占位符。所以现在输入?id=$1
. 确保变量被称为 1 而不是别的东西。
如果你有多个参数,你可以简单地写¶m2=$2
then¶m3=$3
等等。
您需要添加的最后一件事是[NC,L]
WhereNC
方法Non Case
,这意味着如果有人用大写 I 编写 index.php,则无关紧要。并且,L
前面的重写条件仅适用于该规则,而不适用于您以后可能拥有的任何规则。
如果您不理解我的解释,请观看 Dani Krossing 的视频,他解释得很好:https ://www.youtube.com/watch?v=zJxCq6D14eM
推荐阅读
- azure - 为 VM 部署 ARM 模板时的 InvalidResourceReference
- javascript - 如何使用 JavaScript 对二维数组进行排序?
- c# - 如何减少 XCeed WPF 扩展工具包 Richtextbox 中的行距
- java - JAVA:通过 URL Aurora(mysql)的 JDBC 连接 aws
- c# - 无法弄清楚如何使用 C# 做一个计时器
- python - Skimage 未找到模块错误
- django - Django和Jenkins在执行shell上出现多个错误
- outlook - 对于某些用户,Outlook 加载项在 Outlook 2013 Desktop 上显示为灰色
- javascript - 如何使用 onClick 触发两个函数 reactJs
- java - 如何在 Android 浏览器中添加长按下载弹出菜单?