我正在尝试隐藏.php文件扩展名但由于某种原因无法使其正常工作。我最近的尝试如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>
我尝试了很多不同的代码差异我在网上找到但仍然没有运气。 .htaccess文件放在根目录中。
答案 0 :(得分:87)
我用过这个:
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]
答案 1 :(得分:14)
使用PHP脚本sans扩展的另一个选项是
Options +MultiViews
甚至只是在目录.htaccess
中跟随:
DefaultType application/x-httpd-php
后者允许将没有扩展名script
的所有文件名视为PHP脚本。虽然MultiViews使网络服务器寻找替代方案,但只提供了基本名称(但是这会影响性能)。
答案 2 :(得分:6)
1)你确定mod_rewrite模块已启用吗?检查phpinfo()
2)您的上述规则假定网址以“文件夹”开头。它是否正确?你真的想在URL中有文件夹吗?这将匹配如下的URL:
/folder/thing -> /folder/thing.php
如果你真的想要
/thing -> /folder/thing.php
您需要从匹配表达式中删除该文件夹。
我通常使用它来将请求路由到没有php的页面(但你的工作应该让我觉得mod_rewrite可能没有启用):
RewriteRule ^([^/\.]+)/?$ $1.php [L,QSA]
3)假设您在.htaccess文件中声明规则,您的安装是否允许在.htaccess文件中设置选项(AllowOverride)覆盖?有些共享主机没有。
当服务器找到.htaccess文件时(由...指定) AccessFileName)它需要知道在那里声明了哪些指令 文件可以覆盖以前的访问信息。