我看到了 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 中。如果放置在其他地方,可能需要进行一些小的调整。