2011-04-03 91 views
1

我試圖從我的文件中隱藏.php擴展名,以及強制生成的URL上的尾部斜槓。.htaccess在目錄中重寫 - 隱藏PHP擴展和強制結尾斜槓

示例:對/about.php的請求將變爲/ about /,並且/ about的請求將轉到/ about /。

下面的重寫代碼完美地工作,當我在我的hostdomain根:

RewriteEngine On 
RewriteRule ^(.*)/$ /$1.php [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://edit.mydomain.org/$1/ [R=301,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\.php\ HTTP/ [NC] 
RewriteRule .+ http://edit.mydomain.org/%1 [R=301,QSA] 

不過,我需要我的文件移動到該主機名的目錄。將目錄名添加到規則中,並在目錄中使用.htaccess根本不起作用,似乎會導致無盡的重定向。

我看了看周圍的StackOverflow和其他網站,並試圖許多例子,結束了與許多不同的錯誤,最常見的是:

  • 一切都是無止境的重定向。
  • 除目錄主頁以外的所有內容都是500錯誤。
  • about.php重定向到/ about,但沒有重定向到/ about /和/ about /顯示500錯誤。
  • 一切正常,但當沒有文件名訪問時,(目錄)index.php的主頁進入無盡的重定向。
  • 事情重定向到edit.mydomain.org/home/username/public_html/mydomain.org/edit/pagename.php顯然不存在。

感謝您的幫助!我真的需要將這些文件保存在一個目錄中,但如果需要,.htaccess可以進入主機名root。

這個目錄將edit.mydomain.org/dave/

回答

3

另存爲的.htaccess,並把它放在「戴夫」目錄

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\..+$ 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^(.*)$ http://edit.mydomain.org/dave/$1/ [R=301,L] 

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

非常感謝!這工作完美。 我也想知道如何在有人直接訪問索引文件時隱藏index.php?現在,它只是重定向到/ index /並顯示主頁。 我添加了一個重定向行,我找到了index.php,但現在它給了我一個Apache「此文檔已移動」頁面,但鏈接仍然轉到index.php。 – Brian 2011-04-03 06:11:13

+1

@Brian - 如果你不想讓人們訪問index.php,那麼通過在'RewriteEnginx On'行:'DirectoryIndex whatever.php index.php'後添加.htaccess來改變目錄索引。然後,當你將瀏覽器指向一個文件夾時,Apache將首先查找whatever.php文件,如果它存在,它將使用它,如果它不存在,它將查找index.php。所以你可以將你的索引文件改成任何.php任何人去index.php只會得到一個404文件找不到錯誤。 – Emmanuel 2011-04-03 07:33:01

+0

哦,順便說一句,如果你真的不想讓人知道你使用的是php,請確保你的php.ini中的expose_php設置被設置爲Off。看到這個鏈接:http://goo.gl/JRIYp – Emmanuel 2011-04-03 07:37:46

1

這對我的作品

RewriteBase/
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

真棒,以爲我永遠不會找到它。 :) – 2012-04-24 21:42:48

相關問題