1
我最近將我網站上的文件擴展名從.html切換到.php。因此,我希望做到以下幾點:將.html文件重定向到.php等效文件並且不顯示任何文件的.php擴展名
重定向.html文件到他們.PHP等效
所有網址中刪除.php擴展
擴展名的網址應工作(例如,foo.com/bar應顯示頁面位於foo.com/bar.php)
這是我目前的方法,我從各種工具拼湊在一起來源:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html$ $1.php [L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]
我的方法至少有三個問題:
當一個人試圖訪問foo.domain/bar.php,php擴展遺體(不過,值得注意的是,foo.domain /條確實顯示正確的PHP頁面)
雖然.html文件請求做顯示正確的PHP頁面,.html擴展名遺體(我想沒有擴展DISPLA Y)
它現在無法訪問目錄,而不包括在URL中的index.php(例如,foo.com/bar/拋出一個404錯誤)
由於必須是顯而易見的,我找到了mod_rewrite真的很難。任何幫助,將不勝感激。
非常感謝您的幫助的頂部!我試了一下你的代碼,這是我發現的。 規則#1和#2都可以工作(foo.com/bar.html和foo.com/bar.php都會重定向到foo.com/bar)。但是,#3不起作用。相反,服務器繼續尋找文件的無擴展版本。 此外,我的描述是誤導性的,我似乎在說所有的文件都在根。他們不是。因此,我相信DOCUMENT_ROOT不應該成爲規則#3的一部分。對不起,誤導你。 (但是,我在根目錄下運行了文件測試,看看是否DOCUMENT_ROOT是問題所在) – mbarrish
我一定是一直在使用PHP太多。 「{$ 1}」應該是「$ 1」。我編輯了上面的代碼。對於那個很抱歉。由於你在子文件夾中,你應該使用'RewriteCond%{DOCUMENT_ROOT} /子文件夾/ {$ 1} .php -f'。另外請確保也更新'RewriteBase /子文件夾'。 – Gerben
再次感謝您的幫助@Gerben。可悲的是,有些東西仍然不對,因爲我仍然收到一個404錯誤,表明服務器正在尋找.php文件的無擴展版本。另外,我應該更清楚目標.php文件的位置;他們不在任何一個特定的目錄,但在網站上的任何地方。所以我認爲第三條規則的重寫條件應該更通用。 – mbarrish