2016-11-03 72 views
1

我已經爲我的網絡服務器刪除了.php文件擴展名。我只是想讓它看起來更漂亮。這很好。.htaccess刪除擴展名,但允許404(如果不存在)

我有以下網頁: sitename.com/portfolio sitename.com/portfolio/resume/file.html

的htaccess具有完美的規則,以便當他們參觀的第二個鏈接它只是將其轉化爲投資組合.php?resume & file = $ 1。這很棒。

好吧,繼承人的問題。由於我刪除了附加信息,因此如果用戶使用traing slash將域名設置爲sitename.com/ portfolio/,則它們將獲得內部服務器錯誤。同樣,如果他們只輸入sitename.com/portfolio/r,他們也會因爲它不存在而出現錯誤。我知道解決這個問題的一個辦法是在每個頁面的htacess中添加一個選項,但這似乎是一個糟糕的做法。

反正我在這裏使用當前htacess文件:

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^portfolio/resumes/([^/]+).html$ /portfolio.php?resume&file=$1 [L,QSA] 
RewriteRule ^portfolio/resumes$ /portfolio.php?resumes [L,QSA] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ /$1.php [L] 
ErrorDocument 404 /404.php 

如果我訪問,這並不頁面上的網站存在類似sitename.com/1或sitename.com/1.php然後我得到我的404頁面,但如果1.php DID存在,那麼我會看到它,如果它確實存在,我鍵入sitename.com/1/或sitename.com/1/somethingelse然後而不是404(我期望)然後它給我一個內部服務器錯誤。有沒有辦法解決?我的語法錯誤?由於

回答

1

這是因爲當你請求的URI以斜槓如:/URI/,您的規則將其重寫爲/uri/.php,而不是/uri.php這是一個未知的/不受支持的目標。您需要接受作爲可選字符的尾部斜線。將您的規則更改爲:

RewriteRule ^(.*?)/?$ /$1.php [L] 
+1

非常感謝! :) – Kaboom

相關問題