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

标签 regex apache .htaccess redirect mod-rewrite

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

最佳答案

使用此代码隐藏/删除 .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]

关于regex - 使用 .htaccess 文件删除 .php 文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462799/

相关文章:

java - 正则表达式:在任何情况下突出显示 TextView 中的输入

.htaccess - 如何在 Netbeans 中突出显示 .htaccess 文件

regex - Htaccess 重写显示 404 未找到

php - 如何创建一个无论字符序列如何都匹配的正则表达式?

regex - SciTE Regex,x 和 y 次之间的匹配表达式,例如\w*{x,y}

java - 在 ssh 服务器上打开 channel

php - 在 PHPinfo() 中找不到 “mysql”;

java - 如何使用 ApacheDs 将 POJO 映射到目录?

php - .htaccess - 不路由到公用文件夹

Javascript:需要正则表达式将字符串拆分为数组,保留小数点和引号不变