【问题标题】:.htaccess in wordpress site issue.htaccess 在 wordpress 网站问题
【发布时间】:2012-02-19 13:18:07
【问题描述】:

Google 的 WMT 工具将我的网站视为 2 个不同的网站,因此我想实现从非 www 到 www 的 301 重定向。主站点 www.mysite.com 是使用 Flash 构建的,包含 wordpress 博客的文件夹单独保存在 www.mysite.com/blog/ 中。

在 Wordpress 文件夹中有一个带有以下脚本的 .htaccess 文件,该文件看起来不正确,因为有 2 个 RewriteRules 和 RewriteCond 条目。我应该删除其中一个还是两个都需要?

为什么 !-f 和 !-d 在那里 - 它们是做什么的?

我的主 Flash 站点还应该有自己的 .htaccess 文件,用于 301 非 www 到 www 吗?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

【问题讨论】:

    标签: wordpress .htaccess


    【解决方案1】:
    <IfModule mod_rewrite.c>
    
    RewriteEngine On
    RewriteBase /blog/
    
    #If the file requested is index.php from the current folder(here: blog)
    #do not do anything
    RewriteRule ^index\.php$ - [L]
    
    #if other requests are not regular files or directories,
    #redirect it to /blog/index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
    
    </IfModule>
    

    请勿删除上述任何规则。他们很好,需要。事实上,我建议你也添加这个:

    RewriteCond %{REQUEST_FILENAME} !-l
    

    来自rewritecond apache docs-f-d-l 是 CondPatterns 的变体。而不是真正的正则表达式字符串。

    • '-d'(是目录) 将 TestString 视为路径名并测试它是否存在,并且是一个目录。
    • '-f'(是常规文件) 将 TestString 视为路径名并测试它是否存在,并且是一个常规文件。
    • '-l'(是符号链接) 将 TestString 视为路径名并测试它是否存在,并且是符号链接。

    如果以感叹号('!')为前缀,则会否定它们的含义。即!-f 表示不是常规文件。


    要从non www 重定向到www url,请在.htaccess 中使用DocumentRoot

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ www.mysite.com/$1 [L,R=301] 
    

    【讨论】:

    • 感谢您解释这些!为了清楚起见,您是说我应该使用 2 个 .htaccess 文件 - 每个根文件夹中都有一个?
    • @ubique 是的。但使用你在博客文件夹中的那个。还有我写在你的文档根目录中的那个。
    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 2013-05-20
    • 2012-12-03
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多