htaccess 重写。我不希望所有这些都被重写 - 如何排除某些页面?

Posted

技术标签:

【中文标题】htaccess 重写。我不希望所有这些都被重写 - 如何排除某些页面?【英文标题】:htaccess rewriterule. I don't want all of them rewritten - How to exclude some pages? 【发布时间】:2012-11-29 11:54:44 【问题描述】:

我的htaccess如下:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^moreinfo/(.*)$ http://www.kgstiles.com/moreinfo$1 [R=301]
    RewriteRule ^healthsolutions/(.*)$ http://www.kgstiles.com/healthsolutions$1 [R=301]
    RewriteRule ^(.*)\.html$ $1/ [R=301]
    RewriteRule ^(.*)\.htm$ $1/ [R=301]
</IfModule>

我现在使用 wordpress 而不是直接的 html 编码。上面的重写规则用于转发根目录以及 /moreinfo/ 和 /healthsolutions/ 目录中的所有旧 .html 和 .htm 页面。不幸的是,他们还从 wordpress 页面中删除了 .htm 和 .html(我认为它们最初都以 php 结尾)。现在我看到了一些基本功能,比如在 .html 结尾的 wordpress 的可视化编辑器中打开图像编辑器(使用它们会产生 404 错误)。

所以问题是:有什么办法可以将我的重写规则限制在某些目录中,这样 Wordpress 的功能就不会受到阻碍?

感谢任何帮助!

【问题讨论】:

【参考方案1】:

你需要添加一个重写条件,比如:

RewriteCond $1 !^(dontrewrite\.php)

您可以在其中添加 RegEx 表达式以省略某些目录/文件夹/文件类型。

【讨论】:

【参考方案2】:

你可以试试这样的:

重写引擎开启

# assuming wordpress is installed in blog directory
RewriteRule ^blog(/.*|)$ - [L] # don't take any action

RewriteRule ^moreinfo/(.*)$ http://www.kgstiles.com/moreinfo$1 [R=301,L]
RewriteRule ^healthsolutions/(.*)$ http://www.kgstiles.com/healthsolutions$1 [R=301,L]
RewriteRule ^(.*)\.html$ $1/ [R=301,L]
RewriteRule ^(.*)\.htm$ $1/ [R=301,L]

【讨论】:

好吧 Wordpress 安装在根目录以及许多重定向中,但我相信我尝试允许的所有功能(比如编辑图像都在 wp-content 文件夹中。所以如果我替换上面的“blog”加上wp-content,会不会有同样的效果? 嗯,在这种情况下,这并不容易,因为 WP 无论如何都需要所有请求都通过其根 index.php。明天我将尝试在我的 WP 安装上找到解决方案。 我为文件夹 /wp-content/、/wp-admin/ 和 /wp-includes/ 添加了上述排除项,它运行良好,谢谢!

以上是关于htaccess 重写。我不希望所有这些都被重写 - 如何排除某些页面?的主要内容,如果未能解决你的问题,请参考以下文章

htaccess重写工作但不是所有规则

从 HTACCESS 文件中的所有 ISAPI 重写 3 规则中排除目录

.htaccess - 将所有内容静默重写/重定向到内部子文件夹

htaccess使用https,非www和目录尾随将两个域重写为一个域

symfony2 重写规则 .htaccess app.php

.htaccess 重写失败,不确定如何排除故障