7

我希望 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。

4

5 回答 5

38

使用此代码隐藏/删除.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]
于 2012-05-06T13:32:27.870 回答
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

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

于 2012-05-06T10:20:47.003 回答
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 
于 2012-11-18T11:44:18.607 回答
1

粘贴在我的 .htaccess 文件中的所有内容之上对我有用...

## 301 Redirects
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L]
于 2012-11-26T06:25:05.543 回答
0

您的重写规则不正确,这是错误的方式。试试这个:

RewriteRule ^(.*).php$ /$1 [L,R=301]
于 2012-05-05T14:37:22.000 回答