我正在尝试使用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
误导道歉。
答案 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]