使用子目录中的htaccess删除文件扩展名

时间:2012-02-07 17:40:42

标签: linux apache .htaccess mod-rewrite

我正在尝试使用htaccess删除文件扩展名,因此www.mysite.com/file.php变为www.mysite.com/file

我在.htaccess文件中使用以下代码:

Options +FollowSymLinks
Options +Indexes
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

到目前为止,这么好。它落在哪里的子文件夹: www.mysite.com/subfolder/file.php 变得 www.mysite.com/file

我已尝试在子文件夹中上传另一个.htaccess文件,但它仍然会这样做。感觉它应该非常简单,但我很挣扎......任何人都可以帮助我吗?谢谢!

编辑对不起大家,应该说 - 该文件位于子文件夹中,如下所示:

www.mysite.com/folder/subfolder/file.php

.htaccess文件位于/folder,网址更改为以下格式:

www.mysite.com/subfolder/file

误导道歉。

3 个答案:

答案 0 :(得分:5)

这是你需要隐藏.php扩展名的规则。这将进入DOCUMENT_ROOT目录中的.htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

# To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

答案 1 :(得分:1)

您不应该为此使用重写规则。 Apache有明确的内置选项,用于执行您正在尝试执行的操作,称为MultiViews,这就是您应该使用的内容:

  

MultiViews的效果如下:如果服务器收到/ some / dir / foo的请求,如果/ some / dir启用了MultiViews,并且/ some / dir / foo不存在,那么服务器会读取目录查找名为foo。*的文件,并有效地伪造一个命名所有这些文件的类型映射,为它们分配相同的媒体类型和内容编码,如果客户端通过名称请求其中一个文件。然后,它会根据客户的要求选择最佳匹配。

只需将Options MultiViews添加到.htaccess,并确保AllowOverride已正确配置。

答案 2 :(得分:0)

在野外猜测 尝试

  RewriteRule ^(.+)$ $1.php [NC,L]