簡體   English   中英

MultiViews容忍錯誤的URL

[英]MultiViews is *too* tolerant of bad URLs

當我啟用MultiViews時,如果我訪問錯誤的URL,則當我希望用戶收到404錯誤時,仍然可以訪問我的頁面(index.php)。 我試圖弄清楚如何解決此問題,而無需在.htaccess創建規則。

例如,“ www.mydomain.com/ index / blah / blah”訪問index.php ,但是由於多余的尾隨垃圾URL組件,我希望它失敗。 類似地,對於“ / contact / blah / awuihda / hiu”(顯示contact.php的內容),應該給出404錯誤,因為“ / blah / awuihda / hiu”不存在。

如果禁用MultiViews,它可以很好地工作,但是我不能盡可能多地縮寫URL(例如,不能鍵入“ / contact”來顯示“ contact.php”)。

您可以使用以下命令,因此不需要.php擴展名,這是通常的方法:

RewriteEngine on
# Remove .php if it's present with a 301 redirect
RewriteRule ^(.+)\.php$ $1 [R=301,L]
# If a request doesn't exist as a directory, file or symlink
# and it does exist with .php appended, rewrite to that
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

我知道它在.htaccess添加了一條規則,但這條規則適用於所有內容,也意味着您不會遇到潛在的重復內容,無論是否使用.php (或實際上在之后的任何內容都可以使用)就像您的示例一樣)。 希望它有用。

它可以進入主服務器配置,但需要更改。

我找到了適合我的解決方案。

Options -Indexes SymLinksIfOwnerMatch -MultiViews

RewriteEngine On

RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

資料來源: 鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM