我有时会在网站网址中看到什么不寻常的东西?

What is the unusual thing that I sometimes see in website urls?

抱歉,我真的不知道标题怎么写,但这已经困扰我好久了。我一直想知道为什么有时您会在网站上看到奇怪的 url 结构。以 youtube 为例:

youtube.com/c/this_persons_channel

我只是不明白它是如何工作的! 我知道 / 意味着它是网站内的一个文件夹,但它是如何结束的。 它是一个文件吗?如果是这样,文件类型在哪里? 这个文件是用代码制作的吗?因为它是针对特定用户的。他们制作网站时不可能在那里。

如果这是一个愚蠢的问题,我很抱歉,但我不知道要搜索什么才能找到更多相关信息。

我想你说的是重写url。这可以在项目的 .htaccess 文件中完成。

url结尾不是文件或文件夹。它是一个查询字符串。可以通过代码访问并用于自定义页面。本题取url:


也可以表示为:

https://whosebug.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= [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 重写和制定自己的规则。 What is a rewrite engine?

第 2 行:

RewriteCond %{REQUEST_FILENAME} !-d

这一行是一个条件,有点像 if 语句,如果请求的文件名不是目录,则继续执行代码。这是为了防止文件与文件夹同名并且在 url.

中混淆的问题

第 3 行:

RewriteCond %{REQUEST_FILENAME}\.php -f

此行检查请求的文件是否具有扩展名'php',不一定是php,它可以是任何你想要的。
有关 .htaccess 规则和条件的更多信息:.htaccess rewrite rules

第 4 行:

RewriteRule ^index/([0-9a-zA-Z_-]+) index.php?id= [NC,L]

好的,这是最令人困惑的一行。它基本上描述了将 url 更改为的规则。

开头的 '^' 表示忽略 url 之前的任何内容。所以它会忽略 url.

中 'index' 之前的任何内容

现在您要设置 index/ 和 url 中下一个“/”之间允许使用哪些字符的规则。如果您在 url 中只有一个查询,则不必担心在末尾添加另一个“/”。但是如果你有一个 ?name 参数,例如 url 将是 https://localhost/index/5/charlie。但是因为我有两个搜索参数,所以我必须添加另一个正则表达式。所以最后一行现在变成 RewriteRule ^index/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) index.php?id= [NC,L]

在此示例中,它允许从 0-9、a-z(小写和大写)以及下划线和连字符的所有字符。因此,仅当 url 包含这些字符时,它才会重写。例如,如果它包含一个美元符号 $,那么它就不会重写。

确保在右方括号后加上 +!如果末尾没有 +,它将只允许 1 个字符值。所以 ?id=5 会工作,但 ?id=52 不会 work.But 有了 + 就可以了。

现在,该行的下一部分是告诉服务器您要在 url 中重定向到什么。在这种情况下你想重定向到 index.php 所以你写那个。

您还想包含参数,以便您可以在代码中实际使用它们。所以现在添加查询 string/s。但是我们不知道 ?id 参数是什么。所以我们需要在那里放一个占位符。所以现在输入 ?id=。确保变量被称为 1 而不是其他东西。

如果你有多个参数,你只需写 &param2= 然后 &param3= 等等。

您需要添加的最后一件事是 [NC,L] 其中 NC 表示 Non Case,这意味着如果有人用大写字母 I 写 index.php,这无关紧要。其中 L 表示之前的重写条件仅适用于该规则,而不适用于您以后可能拥有的任何规则。

如果您不明白我的解释,请观看 Dani Krossing 的视频,他解释得非常好:https://www.youtube.com/watch?v=zJxCq6D14eM