使用 .htaccess 文件删除 .php 文件扩展名
Posted
技术标签:
【中文标题】使用 .htaccess 文件删除 .php 文件扩展名【英文标题】:Removing .php file extension with .htaccess file 【发布时间】:2012-05-14 19:44:43 【问题描述】:我希望 www.example.com/about.php 只是 www.example.com/about
我创建了一个 .htaccess 文件并将其放在服务器的根目录中。 我正在使用 linux 共享主机。 PHP 5.2 版
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php
似乎这段代码应该可以正常工作,但由于某种原因它不能正常工作。当我尝试导航到没有 .php 扩展名的页面时出现 404 错误。
这也是我的标记:
<nav>
<div class="container">
<ul>
<li><a href="index.php" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="current-nav"';?>>home</a></li>
<li><a href="about.php">about</a></li>
<li><a href="services">our services</a></li>
<li><a href="portfolio" <?php if (strpos($_SERVER['PHP_SELF'], 'portfolio.php')) echo 'class="current-nav"';?>>portfolio</a></li>
<li><a href="testimonials" <?php if (strpos($_SERVER['PHP_SELF'], 'testimonials.php')) echo 'class="current-nav"';?>>testimonials</a></li>
<!--<li><a href="#">client area</a></li>-->
<li><a href="contact" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="current-nav"';?>>Contact</a></li>
<li><a href="order" <?php if (strpos($_SERVER['PHP_SELF'], 'order.php')) echo 'class="current-nav"';?>><strong>Free Quote</strong></a></li>
</ul>
</div>
</nav><!--/navigation-->
您可以看到我尝试使用链接中的 php 扩展名,也尝试不使用。带有 php 扩展名的链接会转到页面,但不要删除扩展名。
我做了一个测试,看看是否通过放入一些垃圾并返回 500 错误来启用 module_rewrite。
【问题讨论】:
如果您的主机是共享的,那么请尝试这篇文章来完成它。 kvcodes.com/2016/02/godaddy-remove-php-extension 我概括了这个问题,因为它似乎并不特定于 godaddy 或 php。 【参考方案1】:使用此代码隐藏/删除.php
扩展:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^ %REQUEST_URI.php [L]
【讨论】:
这个选项是唯一一个对我也适用于 Godaddy 的选项。谢谢@anubhava 其他解决方案允许页面在有或没有扩展的情况下呈现。对于 GoDaddy,这是唯一可以删除 .php 扩展名的解决方案,无论链接是什么。谢谢。 谢谢!非常适合老爹 这确实是 GoDaddy 上唯一有效的配置! 在更改主机并使用 Plesk Onyx 而不是 cPanel 后,我用来隐藏.php
扩展的代码停止工作。我不知道为什么,但你的代码已经完全解决了这个问题。【参考方案2】:
所以在与谷歌进行了长时间的较量之后,我终于想出了这个。 这适用于 Godaddy 共享主机。 它删除了 php 文件扩展名,因此 http://yoursite.com/about.php 变为 http://yoursite.com/about
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f #If requested is not a filename...
RewriteCond %REQUEST_FILENAME !-d #And not a directory
RewriteRule ^(.*)$ $1.php [L] # perform this redirect
(上传到服务器前删除cmets)
【讨论】:
但这不是正确的解决方案,因为它会将任何/not-found
文件重写为 /not-found.php
,即使系统中不存在该 php 文件。【参考方案3】:
我也遇到了这个问题,但我发现这似乎解决了 GoDaddy .htaccess 问题。
# Fix Rewrite
Options -Multiviews
# Mod Rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php
【讨论】:
太棒了@John SMith,这也适用于 Site5 托管。 但我是 Godaddy 用户,我的是无限托管,在这里无法使用。【参考方案4】:粘贴在我的 .htaccess 文件中的所有内容之上...
## 301 Redirects
RewriteCond %QUERY_STRING ^$
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L]
【讨论】:
【参考方案5】:您的重写规则不正确,是错误的方式。试试这个:
RewriteRule ^(.*).php$ /$1 [L,R=301]
【讨论】:
感谢您的输入,但没有运气。仍然收到 404 错误。以上是关于使用 .htaccess 文件删除 .php 文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 文件删除 CodeIgniter 中的 index.php
.htaccess 文件 - 删除 .php 扩展名“服务器错误”[重复]