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

ada*_*ble 38 php .htaccess

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

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

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

我尝试了很多不同的代码差异我在网上找到但仍然没有运气..htaccess文件位于根目录中.

rya*_*nve 88

我用过这个:

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]
Run Code Online (Sandbox Code Playgroud)

另见:这个问题

  • 你可以在这里用`http://%{HTTP_HOST}/folder/$ 1`替换`http:// example.com/folder/$ 1`. (5认同)

mar*_*rio 14

使用PHP脚本的另一个选项是扩展名

Options +MultiViews
Run Code Online (Sandbox Code Playgroud)

或者甚至只是在目录中.htaccess:

DefaultType application/x-httpd-php
Run Code Online (Sandbox Code Playgroud)

后者允许将没有扩展名的所有文件名script视为PHP脚本.虽然MultiViews使网络服务器寻找替代方案,但只提供了基本名称(但是这会对性能产生影响).


typ*_*ror 6

1)你确定mod_rewrite模块已启用吗?校验phpinfo()

2)您的上述规则假定URL以"文件夹"开头.它是否正确?你真的想在URL中有文件夹吗?这将匹配以下URL:

/folder/thing -> /folder/thing.php
Run Code Online (Sandbox Code Playgroud)

如果你真的想要

/thing -> /folder/thing.php
Run Code Online (Sandbox Code Playgroud)

您需要从匹配表达式中删除该文件夹.

我通常使用它来将请求路由到没有php的页面(但你的工作应该让我认为mod_rewrite可能没有启用):

RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]
Run Code Online (Sandbox Code Playgroud)

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

当服务器找到.htaccess文件(由AccessFileName指定)时,它需要知道在该文件中声明的哪些指令可以覆盖先前的访问信息.