mod-rewrite:这个重定向到子目录的简单重写有什么问题?

mod-rewrite:这个重定向到子目录的简单重写有什么问题?

根目录 ( http://www.example.com) 中有一个 catch allindex.php页面和一个.htaccess文件。在这个根目录中,我有一个wordpress/目录,其中包含(令人惊讶的是)一个 Wordpress 安装。

我的目标是当用户输入时,http://www.example.com他们会被带到http://www.example.com/wordpress

这是我的重写规则:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/wordpress
RewriteRule ^/(.*)$ http://%{SERVER_NAME}/wordpress/$1 [L]

目前它似乎什么也没做 - 它仍然index.php在根目录中加载。

我的重写规则应该是什么(我假设我使用的规则是错误的)?

答案1

在自己的目录中使用 WordPress 的正确方法是从 WordPress 目录复制 index.php 文件并将此行更改为:

require('./wp-blog-header.php');

对此:

require('./your_wordpress_directory/wp-blog-header.php');

完成此操作后,请返回管理选项并重新保存您的永久链接,WordPress 将根据您选择的站点 URL 和 WordPress URL 选项自动重写您的 .htaccess。

这些也可以在 wp-config.php 中定义

如果 WordPress 位于http://example.com/wordpress但您希望用户通过输入 example.com 来访问您的网站。

define('WP_HOME', 'http://example.com')

define('WP_SITEURL', 'http://example.com/wordpress');

答案2

具体来说,错误在于你没有告诉它如何处理该匹配。[L] 本身告诉它这是评估是否匹配的最后一条规则,但对该匹配没有任何操作。最典型的情况是 [R] 执行重定向。

如果你想重定向http://www.domain.com/http://www.domain.com/wordpress/通过重定向,您应该能够简单地执行以下操作:

RewriteEngine on
RewriteRule ^/$ /wordpress/ [R,L]

这将获取后面没有任何内容的 URL(即只有 www.domain.com)并将其重定向到相对路径“/wordpress”。因此,当您点击 www.domain.com/ 时,您将被重定向到 www.domain.com/wordpress/,但如果您点击 www.domain.com/wordpress/?pageid=1,甚至 www.domain.com/some_specific.html,则不会命中重写规则,因为它不符合 ^/$ 规则。

答案3

尝试这个:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/wordpress
RewriteRule ^(.*) http://%{SERVER_NAME}/wordpress/? [L]

相关内容