htaccess 将除一页之外的所有页面从 html 重定向到 php

Posted

技术标签:

【中文标题】htaccess 将除一页之外的所有页面从 html 重定向到 php【英文标题】:htaccess redirect all but one page from html to php 【发布时间】:2011-11-04 20:55:56 【问题描述】:

我的网站设置了 htaccess,将所有页面从 html 定向到 php,如下所示:

RewriteEngine On
RewriteBase /

RewriteCond %HTTP_HOST ^website.com
RewriteRule (.*) http://www.website.com/$1 [R=301,L]

RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]

我正在尝试设置 Yahoo Site Explorer 并验证我的帐户,我需要添加元标记或将 html 文件添加到我的网站根文件夹。雅虎拒绝识别我的元标记(我确定我已正确添加)!所以我唯一的选择是添加 html 文件。

我的 html 文件不断被重定向到 php,而 yahoo 似乎找不到它。

有什么我可以添加到我的 htaccess 文件中,以便除了 yahoo 需要查看的一个文件之外的所有文件都重定向到 php?

【问题讨论】:

【参考方案1】:

尝试添加这个条件:

RewriteCond %REQUEST_FILENAME !-f

这应该允许任何实际存在的文件(对于其他类型的文件还有其他选项)。这假设它不会为已经存在的其他文件弄乱其他任何东西。

【讨论】:

感谢 LDG 完成了这项工作!为了让其他有此问题且不熟悉 htaccess 的人清楚,我必须将此行放在我的 html/php 重定向之前【参考方案2】:

我看到了 4 种主要方法(您选择哪一种更适合您 - 这取决于您的网站重写规则逻辑):

1.添加全局排除规则,以防止对该文件进行任何进一步的重写操作

RewriteCond %HTTP_HOST ^website.com
RewriteRule (.*) http://www.website.com/$1 [R=301,L]

# do not do any rewriting to this file
RewriteRule somefile\.html$ - [L]

RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]

如果您希望可以更具体地指定文件的完整路径(如果有超过 1 个具有该名称但位于不同文件夹中的文件,则有助于仅排除 1 个特定文件 - 此类 URL 应以无前导斜杠开头):

# do not do any rewriting to this file
RewriteRule ^full/path/to/somefile\.html$ - [L]

2。添加全局排除规则,以防止对任何现有文件或文件夹进行任何进一步的重写操作:

RewriteCond %HTTP_HOST ^website.com
RewriteRule (.*) http://www.website.com/$1 [R=301,L]

# do not do anything for already existing files
RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule .+ - [L]

RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]

3.添加排除条件,拒绝将此特定 .html 文件重写为 .php

RewriteCond %REQUEST_URI !somefile\.html$
RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]

如果您希望可以更具体地指定文件的完整路径(如果有超过 1 个具有该名称但位于不同文件夹中的文件,则有助于仅排除 1 个特定文件——此类 URL 应以斜杠开头) :

RewriteCond %REQUEST_URI !^/full/url/path/to/somefile\.html$

4.添加排除条件,如果这样的.html文件不存在,则只允许将.html重写为.php

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]

以上所有规则旨在放置在网站根文件夹的 .htaccess 中。如果放置在其他地方,可能需要进行一些小的调整。

【讨论】:

不错的全面答案,提供灵活的选项。这里的数字 4 与接受的答案相匹配。

以上是关于htaccess 将除一页之外的所有页面从 html 重定向到 php的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

如何从python中的数组(或矩阵)中提取除一列之外的所有列?

选择除一列之外的所有列[重复]

将除当前用户的用户名之外的所有用户名添加到数组

.htaccess 导致下载所有页面

正则表达式将除 / 之外的所有非字母数字字符替换为空(“”)字符