2

我在 Wordpress 中看到,当您创建一个说“注册”的页面时,它指向http://example.com/register/但根目录中根本没有一个名为 register 的文件夹。这是怎么做到的?

就像这样。当用户点击http://example.com/index.php上的注册链接时,它会将用户带到一个新页面,浏览器中的 URL 将是http://example.com/register/并且页面加载。register文件夹本身不存在。

从下面的答案中,我了解到请求是通过 index.php 通过修改.htaccess

我想知道要放置什么代码,index.php以便http://example.com/register/显示注册页面。

4

4 回答 4

2

在我的 Wordpress .htaccess 文件中,我有:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

这基本上是说如果 URL 的“文件名”部分不作为文件!-f存在或作为目录存在,!-d则在内部将请求重写为/index.php强制请求由index.phpWordpress 处理。

好的,根据您的其他评论,以下.htaccess规则将采用http://domain.com/<anything>并在内部将其重写为http://domain.com/index.php?page=<anything>,这将在不考虑大小写(NC标志)的情况下完成,并将保留(预先挂起)任何现有的查询字符串(QSA标志)。这只对服务器上不存在的文件名和目录执行此操作。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?page=$1 [NC,QSA,L]

这确实具有以下副作用,您应该能够以编程方式处理,http://domain.com/register/将被重写为http://domain.com/index.php?page=register/包括尾随的“/”,因为这是一个目录引用。同样,您应该能够在您的 PHP 代码中处理它。

于 2012-08-17T16:34:06.673 回答
1

当 Web 服务器(在本例中为 Apache)尝试打开请求的文件路径时,/register/在本例中,它首先查看该.htaccess文件。

.htaccess文件以及许多其他内容可以将请求重定向到另一个路径。

通常发生的情况是所有请求都重定向到 WordPress 中的单个文件,index.php该文件读取原始请求/register/,并提供正确的 html。

WordPress 为提供正确的 html 所做的工作完全是另一个问题,但您可以从这里开始:https ://www.google.com/search?q=how+wordpress+works

于 2012-08-17T16:45:09.210 回答
0

Wordpress 在 .htaccess 文件中使用 mod_rewrite 如下:

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

# END WordPress

如果文件或目录不存在且脚本不是 index.php,则通过 index.php 路由所有页面请求

于 2012-08-17T16:34:19.637 回答
0

尼尔马丁,这真的不是一个简单的问题。你最好阅读一些关于URL REWRITING的好材料

于 2012-08-17T16:49:05.040 回答