0

我试图让我的服务器在本地看起来很整洁(我发誓我是强迫症),我正在做的是将 wordpress 博客与我所有的子域结合起来。

我的 wordpress 博客是我的主要网站 example.com。而我的子域位于 sub.example.com。

现在,我有这个设置:

public_html
   ( wordpress files here )
   subdomains
      sub1 - (sub1.example.com)
      sub2 - (sub2.example.com)
      sub3 - (sub3.example.com)
   blog - (empty)

博客文件夹是空的。但是,我想将所有 wordpress 文件移动到 blog/ 但将博客的 URL 保留在http://www.example.com/。因此,http://www.example.com/index.php将转到http://www.example.com/blog/index.php以及 blog/ 中的所有目录。

此代码不起作用:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ blog/$1.php [L]

相反,它给了我 / 的索引。有没有办法做到这一点?

4

3 回答 3

0

最好的方法是将所有文件移动到 /blog,然后重新定义您的 Apache 站点根目录为 www. 域包括博客文件夹,如

DocumentRoot /(path)/public_html->DocumentRoot /(path)/public_html/blog

这样,您甚至不必使用 .htaccess 重写来将您的博客文件夹正确映射到 www 域的根目录。

如果由于某种原因你不能这样做,让我们看看你的 htaccess 规则:

RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME}.php -f

这2个冲突。[OR]如果您的 结尾没有 a RewriteCond,则规则充当 AND 运算符,这意味着每个条件都必须为真。因此,您永远不会遇到既不是文件 ( !-f) 又是 .php 文件 ( .php -f) 的匹配项。

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ blog/$1.php [L]

在这里,您将根据 RewriteCond 将 .php 附加到已经包含 .php 的匹配项。

我会尝试以下方法:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ /blog/$1 [NC,L]

如果您将所有文件移动到 /public_html/blog 并且 /public_html 除了您的 /blog 和 /subdomain 文件夹之外什么都没有,那么您甚至真的不需要!-d&!-f因为没有文件或文件夹可以匹配(除了您的子域文件夹但我不确定你是否希望那些在 www 域下提供服务)。看到你的 wordpress css、js 和图像现在也将出现在 /blog 中,你会希望它们的 url 也被转发。RewriteBase /在根文件夹中工作时也不需要。只需用斜杠(如/blog/$1. 最后我添加了一个条件来检查目标请求是否已经包含 /blog 以防止无限重定向......

于 2012-11-19T22:12:25.690 回答
0

不要忘记,即使有重定向,您仍然需要使用 /blog 配置您的站点地址 -

http://www.example.com/blog/

  • 在 Wordpress 设置中。
于 2012-11-22T02:11:50.097 回答
0

这是另一个工作示例:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example\.com$ [NC]
RewriteRule ^$ /blog/$1 [R=303,L]
于 2012-11-23T18:54:21.877 回答