2013-05-06 82 views
4

以下是我的目錄結構刪除結尾的斜線從目錄中的htaccess

Root/ 
    index.php 
    contact.php 
    projects.php 
       /index.php 
       /project1.php 
       /project2.php 

我在的地方重寫刪除所有文件名中的PHP擴展。它運行完美,我可以從www.website.com/projects/project2

訪問www.website.com/projects/project2.php我也希望能夠訪問www.website.com/projects/index.php作爲www.website.com/projects

我已成功地寫一個重寫URL來www.website.com/projects/當我鍵入www.website.com/projects

規則

但是,我無法擺脫最後的斜線。

請注意,我不太瞭解這一點。它大部分來自我在互聯網上找到的東西。我已經環顧了很多人,但到現在爲止還沒有任何工作要做。

下面是代碼:

Options +FollowSymLinks -MultiViews 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^\.]+)$ $1.php [NC,L] 
RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1] 
+0

你想要什麼用這個:「RewriteRule ^([^ \。] +)$ $ 1.php [NC,L]'? – 2013-05-06 22:03:38

回答

8

這是由mod_dir and the DirectorySlash directive引起的。它會自動301重定向對缺少斜線的目錄的請求。這修復了信息泄露安全問題(在上述鏈接中描述),即使存在索引文件(例如index.php),也會列出目錄內容。所以如果你關閉這個功能,要非常小心你的目錄。如果你關閉了目錄索引,那麼這不是一個問題。

您可以打開目錄的斜槓使用:

DirectorySlash Off 

您可以使用選項關閉目錄索引:

Options -Indexes 

然後,你需要有自己的項目之前排除你php的擴展規則:

Options +FollowSymLinks -MultiViews -Indexes 

DirectorySlash Off 

RewriteEngine on 

RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1] 

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

非常感謝您解釋它。它的工作原理就是我想要的! – ghosh 2013-05-06 22:22:07