使用.htaccess文件删除.php文件扩展名

Ada*_*zer 7 apache .htaccess mod-rewrite redirect url-rewriting

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

似乎这段代码应该正常工作,但由于某种原因它不能.当我尝试导航到没有.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--> 
Run Code Online (Sandbox Code Playgroud)

你可以看到我尝试在链接中使用php扩展,也尝试没有.与php扩展的链接转到页面,但不删除扩展名.

我做了一个测试,看看是否通过输入一些垃圾并返回500错误来启用module_rewrite.

anu*_*ava 37

使用此代码隐藏/删除.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]
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一对我有用的片段.谢谢. (6认同)
  • 这个选项也是Godaddy唯一适合我的选项.谢谢@anubhava (2认同)

Ada*_*zer 7

所以经过与谷歌的长时间回合,我终于想出了这个.这适用于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
Run Code Online (Sandbox Code Playgroud)

(在上传到服务器之前删除评论)

  • 这是唯一一个对我有用的东西!谢谢! (2认同)

小智 5

我也遇到了这个问题,但是我发现这似乎可以解决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 
Run Code Online (Sandbox Code Playgroud)


Hav*_*ock 0

你的重写规则不正确,它是错误的。试试这个:

RewriteRule ^(.*).php$ /$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)