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的机制是什么?
答案 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。