htaccess 将 www 重定向到非 www 仍然将 .php 扩展名放在 uri 中

Posted

技术标签:

【中文标题】htaccess 将 www 重定向到非 www 仍然将 .php 扩展名放在 uri 中【英文标题】:htaccess redirect www to non-www still puts .php extension in uri 【发布时间】:2016-12-04 04:10:30 【问题描述】:

我在这里缺少一些东西: Remove .php extension with .htaccess

我的目标:

将所有内容从 www 重定向到非 www

.htaccess 中的当前代码

RewriteEngine on
Options -Indexes
RewriteBase /

RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*)$ /$1.php [L]

当前行为:

将所有内容从 www 重定向到非 www,但在 URI 中添加 php 文件扩展名“.php”(php 文件确实存在)

例如:

www.example.com/hello

重定向到

example.com/hello.php

如何避免 URI 中的 php 扩展?

【问题讨论】:

把这个RewriteRule ^(.*)$ /$1.php [L]改成这个RewriteRule ^(.*)$ /$1 [L] 这种情况总是发生吗?如果你做example.com/hello怎么办? Remove .php extension with .htaccess的可能重复 ***.com/questions/4026021/… 如果您之前使用过301,请清除浏览器缓存。它缓存它。使用 302 进行测试,直到您的重写工作,然后您可以将其设置为永久。 【参考方案1】:

我不太确定为什么,它正在使用以下代码。

@Panama-jack 的建议是一个强有力的建议:在处理 htaccess 规则时使用 302 确实是在设置所有内容 301 之前要走的路。

RewriteEngine on
Options -Indexes
Options -Multiviews
RewriteBase /

RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://iPutMyWholeUrlHere.com/$1 [R=301,L]

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*)$ /$1.php [L]

【讨论】:

以上是关于htaccess 将 www 重定向到非 www 仍然将 .php 扩展名放在 uri 中的主要内容,如果未能解决你的问题,请参考以下文章

sh Apache2将www重定向到非www .htaccess

apache_conf .htaccess将www重定向到非www

htaccess 强制 https 并将 www 重定向到非 www,但没有其他子域

域重定向到www时如何将www子域重定向到非www

apache将http重定向到https,将www重定向到非www

如何将域从www重定向到非www? [复制]