RewriteRule(删除 .php)和旧的重定向 301 不起作用?

RewriteRule(删除 .php)和旧的重定向 301 不起作用?

我没有编辑 .htaccess 的经验

我想

  1. 将非 www 重定向到 www。

  2. 删除 .php 扩展名

  3. 设置自定义 404 页面

我设法做到了这一点(在网络和 serverfault.com 上寻找解决方案),但现在看来,我的旧重定向 301 带有 .php 扩展名不再起作用了:

重定向 301 /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 

答案1

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

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

原因是 RewriteRule 中的替换通常被假定为文件路径,而不是 uri,因此不应用 Redirect 等指令。标志PT(pass through) 告诉 apache 将重写规则视为 uri,并继续应用 uri 映射规则。

相关内容