我正在使用自定義錯誤處理系統。
示例.htaccess檔案命令:
ErrorDocument 404 /error-deal.php?code=404
error-deal.php如果我直接輸入 URL,該檔案存在并處理 $_GET 變數。
帶有檔案擴展名的頁面不會觸發.htaccess重定向到錯誤頁面:
https://example.com/does-not-exist.php
然而沒有擴展名的 URL 會......
https://example.com/does-not-exist
我在這里缺少什么?
其他重寫規則是:
#force https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC]
#redirect all www to non www
RewriteCond %{HTTP_HOST} ^www.donbur.co.uk$
RewriteRule (.*) https://donbur.co.uk/$1 [R=301,L]
#URL re-writes for dynamic pages
#to handle all news requests
RewriteRule ^news/([^/]*)$ /gb-en/news/article.php?title=$1 [L]
#to handle all feature requests
RewriteRule ^features/([^/]*)$ /gb-en/features/feature.php?title=$1 [L]
uj5u.com熱心網友回復:
帶有檔案擴展名的頁面不會觸發 htaccess 重定向到錯誤頁面:
正如評論中提到的,這似乎只會影響具有.php擴展名的URL 。這可能是由于 PHP 在您的服務器上的實作方式造成的。例如,如果所有*.php請求都被代理到另一個后端行程,那么這將繞過您.htaccess在應用程式服務器上的檔案。
不幸的是,由于這似乎是一個共享服務器,您可能無法對此進行任何控制。
但是,您可以嘗試一些方法。盡管這受到您似乎在.php整個網站中使用以結尾的 URL 的阻礙。
在設定自定義錯誤檔案之前嘗試重置默認錯誤檔案。本ErrorDocument應覆寫以前的設定,但是,有時,當這個服務器配置的定義,它沒有。例如:
ErrorDocument 404 default
ErrorDocument 404 /error-deal.php?code=404
如果不是因為您.php在您的站點上使用URL(盡管令人困惑的是,您的站點中似乎混合了無.php擴展名的 URL?),那么您可能會.php使用 mod_rewrite 將所有請求強制為 404(盡管這仍然可能不會覆寫默認錯誤回應)。
您可以在規范重定向(HTTP 到 HTTPS 和 www 到非 www)后嘗試以下操作:
# Force a 404 for ".php" requests that don't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.php$ - [R=404]
如果您沒有任何.phpURL,那么您可以洗掉前面的RewriteCond指令。
旁白:您應該確保/error-deal.php檔案本身不能直接訪問。這當前回傳 200 OK 非錯誤狀態,并且似乎沒有任何東西(機器人元標記、回應標頭、robots.txt)阻止搜索引擎抓取/索引此頁面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322383.html
