wordpress永久链接系统如何工作?

时间:2017-05-10 19:58:08

标签: php wordpress .htaccess mod-rewrite permalinks

Wordpress在.htaccess中使用此代码:

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

第一个问题,下面的代码行是什么意思:

RewriteRule ^index\.php$ - [L]

接下来我不知道index.php如何处理这个问题。因此,所有网址都会重定向到index.php ...

如果我输入此网址:

website.pl/One-two-Five

.htaccess会将我重定向到index.php

webiste.pl/index.php

但是没有信息,我的意思是QUERY_STRING或其他什么。这不是:

website.pl/index.php?data=One-two-Five

但它只是:

website.pl/index.php

这只是index.php ...那么index.php如何才能实现这一目标? WordPress如何处理这个?我找不到任何答案。 WordPress的机制是什么?

1 个答案:

答案 0 :(得分:0)

很好的问题,我最近在another question讨论了一个问题。

如您所说,所有内容(不作为文件或目录存在)都会被index.php重写为:{/ p>

RewriteRule . /index.php [L]

关于代码行:

RewriteRule ^index\.php$ - [L]

如果网址已经是index.php,则只会阻止进一步处理。 -只是说不会改变任何内容,[L]表示停止处理此迭代。这是因为.htaccess重写规则将重新开始处理,直到URL没有变化(因此它的作用是阻止文件系统检查第二次运行)。

之后会发生的事情是WordPress会检查$_SERVER['REQUEST_URI']变量以查看最初请求的页面,并对此采取相应措施。这就是为什么它不需要直接在index.php文件中传递给.htaccess,因为最初请求的URL已经在$_SERVER['REQUEST_URI']变量中可用。

另一点是这些不是重定向,它们是重写。重定向是外部的,返回浏览器。重写仅限内部,不会更改浏览器的URL。