【问题标题】:.htaccess file: redirect files inside of folder.htaccess 文件:重定向文件夹内的文件
【发布时间】:2012-11-12 18:37:21
【问题描述】:

我试图让我的服务器在本地看起来很整洁(我发誓我是强迫症),我正在做的是将 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)

blog 文件夹为空。但是,我想将所有 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]

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

【问题讨论】:

    标签: wordpress .htaccess directory blogs move


    【解决方案1】:

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

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

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

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

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

    这两个冲突。如果RewriteCond 末尾没有[OR],则规则充当 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 以防止无限重定向...

    【讨论】:

      【解决方案2】:

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

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

      • 在 Wordpress 设置中。

      【讨论】:

        【解决方案3】:

        这是另一个工作示例:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-13
          • 1970-01-01
          • 2017-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-03
          相关资源
          最近更新 更多