重写规则(删除.php)和旧的redirect301不工作?

我没有编辑.htaccess的经验

我想

  1. redirect非www到www。

  2. 删除.php扩展名

  3. 设置一个自定义的404页面

我设法做到这一点(寻找在networking和serverfault.com解决scheme),但现在看来,我的旧的redirect301扩展名为.php不再工作:

redirect301 /download.php /features.php

我怎么能解决它? 谢谢!

RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] Options +FollowSymlinks -MultiViews RewriteEngine on RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC] RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC] RewriteCond %{REQUEST_URI} !\.php$ [NC] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule . %{REQUEST_URI}.php [L] Options +FollowSymlinks ErrorDocument 404 /404 RewriteEngine on 

您需要将PT标志添加到您的RewriteRule中:

 RewriteCond %{REQUEST_URI} !\.php$ [NC] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule . %{REQUEST_URI}.php [PT] 

原因是在RewriteRule中的replace通常被认为是一个文件path,而不是一个uri,因此,像redirect等指令不适用。 PT标志(pass through)告诉apache将重写规则视为uri,并继续应用uri映射规则。