.htaccess文件:重定向文件夹内的文件

时间:2012-11-12 18:37:21

标签: wordpress .htaccess directory blogs move

我试图让我的服务器在本地看起来整洁(我发誓我是OCD)而我正在做的是将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,以及博客/.

中的所有目录

此代码不起作用:

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

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

3 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是将所有文件移至/ blog,然后重新定义用于www的Apache siteroot。域包含像

这样的博客文件夹

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

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

如果由于某种原因你无法做到这一点,让我们来看看你的htaccess规则:

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

这两个冲突。如果[OR]末尾没有RewriteCond,则规则将充当AND运算符,这意味着每个条件都必须为true。所以你永远不会有一个既不是文件(!-f)又是一个.php文件(.php -f)的匹配。

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

在这里,您将.php附加到已经包含.php的匹配中,每个RewriteCond。

我会尝试以下方法:

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

如果您将所有文件移动到/ public_html / blog中,除了/ blog和/ subdomain文件夹之外,/ public_html中没有任何内容,您实际上甚至不需要!-d& !-f因为没有匹配的文件或文件夹(除了您的子域文件夹,但我不确定您是否希望在www域下提供这些文件或文件夹)。看到你的wordpress css,js和图像现在也将在/ blog中,你也希望他们的网址也被转发。在根文件夹中工作时,您也不需要RewriteBase /。只需使用/blog/$1之类的斜杠启动目标网址即可。最后我添加了条件来检查目标请求是否已经包含/ blog以防止无限重定向...

答案 1 :(得分:0)

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

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

  • 在Wordpress设置中。

答案 2 :(得分:0)

这是另一个工作示例:

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