2013-05-06 81 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