如何在.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指定)时,它需要知道该文件中声明的哪个指令可以覆盖较早的访问信息。