2010-08-14 61 views
1

我的網站結構有一個根的index.php,一些文件作爲/directory/index.php和一些如/directory/(filename).phphtaccess的 - 迫使後面的斜線兩個目錄深

我有以下的.htaccess其去除PHP擴展和「的index.php」爲我的網址,並強制對SEO善良第一級目錄結尾的斜槓:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

所以正在努力(它們顯示正確的頁面)以下:

/ 
/directory/ 
/directory/filename/ 

不工作的唯一的事情,就是如果我輸入:

/directory/filename 

它道出:

http://(mylocalurl)/Users/(myusername)/Sites/(mysitedirectory)/directory/filename/ 

我的問題是:如何讓我的第二個層次的文件名重寫力尾部的斜線如:

/directory/filename/ 

感謝您的幫助!

回答

4
DirectorySlash on 

將在適當的位置添加尾部斜線。

0

不是100%確定,但它可能是它由第二個RewriteCond觸發,RewriteRule運行,沒有替換任何東西,然後你有[L]使它不能進入​​最後一個RewriteCond。

也許改變兩者的順序可能有幫助?需要

(否則,你可能想看看在Multiviews指令)當你指定執行對外部重定向一個局部相對URL路徑

+0

還我注意到: 「/directory/index.php」 重定向到: 「/目錄/索引/」 代替: 「/目錄/」 其他任何見解將是不勝感激! – novon 2010-08-14 19:02:24

0

,這條道路與斜槓前綴。由於比賽進行到您的RewriteRule測試模式不會有前導斜槓,一定要放一個在改寫:

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 

如果我理解正確的話您的問題,這是你唯一的問題。如果你還需要別的東西,請告訴我。

+0

謝謝,我想這一點,但仍然有同樣的問題: /目錄/文件名 不重定向到: /目錄/文件名/ – novon 2010-08-14 19:00:21

+0

@novon - 和'/目錄/ filename.php'是現有文件?我複製了你的規則集的變化,它在我的測試服務器上工作,嗯.. – 2010-08-14 19:20:12

+0

是啊我有「http://local.dev/directory/filename.php」 和「http://local.dev/目錄/文件名/「正在工作 」http:// local。dev /目錄/文件名「是不是 – novon 2010-08-14 19:59:24