如何在.htaccess中隐藏.php扩展名

可能重复:
使用.htaccess删除.php扩展名

我试图隐藏.php文件扩展名,但由于某种原因无法让它工作。 我最近的尝试如下:

<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php </IfModule> 

我已经尝试了很多不同的代码我已经在网上find的差异,但仍然没有运气。 .htaccess文件放在根目录中。

我用过这个:

 RewriteEngine On # Unless directory, remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L] # Redirect external .php requests to extensionless url RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L] # Resolve .php file for extensionless php urls RewriteRule ^([^/.]+)$ $1.php [L] 

另见: 这个问题

使用PHP脚本sans扩展的另一种select是

 Options +MultiViews 

甚至只是在目录下.htaccess

 DefaultType application/x-httpd-php 

后者允许将没有扩展script所有文件名视为PHP脚本。 虽然MultiViews使Web服务器寻找替代品,只是提供了基本名称(然而,有性能打击)。

1)你确定mod_rewrite模块已启用? 检查phpinfo()

2)您的上述规则假定url以“文件夹”开头。 它是否正确? 你有没有想要在URL中的文件夹? 这将匹配一个URL,如:

 /folder/thing -> /folder/thing.php 

如果你真的想要

 /thing -> /folder/thing.php 

您需要从匹配expression式中删除文件夹。

我通常使用这个路由请求到页面没有PHP(但你的工作,这使我认为,可能不会启用mod_rewrite):

 RewriteRule ^([^/\.]+)/?$ $1.php [L,QSA] 

3)假设你在.htaccess文件中声明你的规则,你的安装是否允许在.htaccess文件中设置选项(AllowOverride)覆盖? 一些共享的主机不。

当服务器find一个.htaccess文件(由AccessFileName指定)时,它需要知道该文件中声明的哪个指令可以覆盖较早的访问信息。