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

时间:2011-08-26 21:52:22

标签: php html .htaccess redirect

我的网站设置了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,似乎雅虎找不到它。

我可以添加到我的htaccess文件中,以便除了雅虎需要查看的一个文件外,所有文件都被重定向到php吗?

2 个答案:

答案 0 :(得分:7)

尝试添加此条件:

RewriteCond %{REQUEST_FILENAME} !-f

这应该允许任何实际存在的文件(其他类型的文件还有其他选项)。这假设它不会搞乱已经存在的其他文件的任何其他内容。

答案 1 :(得分:4)

我看到了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个特定文件 - 此类URL应以NO开头斜杠开头):

# 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个特定文件 - 此类URL应以前导斜杠开头) :

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

<强> 4。添加排除条件,只允许将.html重写为.php,如果此类.html文件不存在:

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

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