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

我希望www.example.com/about.php只是www.example.com/about

我创build了一个.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扩展的链接转到页面,但不要删除扩展名。

我做了一个testing,看是否通过放入一些垃圾并返回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} ^[AZ]{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共同主​​办合作。 它删除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 

(在上传到服务器之前删除注释)

我也有这个问题,但我发现这似乎解决了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 

粘贴在我的.htaccess文件的一切为我工作…

 ## 301 Redirects RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L] 

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

 RewriteRule ^(.*).php$ /$1 [L,R=301]