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 共有ホスティングで動作します。http://yoursite.com/about.php が http://yoursite.com/aboutなるように、php ファイル拡張子を削除します。

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 に答える