我看到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只
,將只允許重寫的.html到.PHP
RewriteCond %{REQUEST_URI} !^/full/url/path/to/somefile\.html$
4.添加排除條件:這樣的網址應以斜線開始) - 如果有超過1個文件,這樣的名稱,但在不同的文件夾中特定文件如果這樣的.html文件不存在:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L]
高於 ALL規則用於放置在.htaccess在網站根目錄。如果放置在其他地方可能需要一些小的調整。
感謝LDG做了這份工作!要清楚給任何其他人與這個問題,並不熟悉htaccess我不得不把這行在我的HTML/PHP重定向 –