事情正在按他们应该的方式进行,而且可能是他们能够工作的唯一方式。让我解释一下。
没有名为mod_rewrite
(或等效的Nginx或IIS组件)对PHP页面的请求必须转到实际的文件系统文件。这就是您看到的请求,如192.168.1.8/wordpress/?p=123
. 正在访问的文件是directory "index" file-- index.php
. 该请求相当于192.168.1.8/wordpress/index.php?p=123
. 您所做的是请求其他文件/目录,请求如下--192.168.1.8/wordpress/asdasdasd
-- 文件系统中不存在这样的文件或目录。
具有mod_rewrite
和.htaccess
正确配置all requests 发送到index.php
. Take a look at the stock WordPress .htaccess
file:
# 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>
# END WordPress
那个
RewriteRule
将所有内容(几乎所有内容)推到
index.php
. 这使得WordPress可以处理任何请求,甚至是对系统中物理上不存在的文件的请求。
如果没有启用pretty permalinks,也就是说,在选择了“default”permalinks的情况下,WordPress甚至不会尝试解析请求,因此这相当于没有mod_rewrite
或.htaccess
完全
而且,如果WordPress无法解析请求,WordPress将无法加载主题的404.php
. 当然,Apache仍然知道请求不正确,并加载自己的404消息。
所以,没有mod_rewrite
, a适当的.htaccess
文件,以及您所描述的行为,这正是事情应该如何工作的。