【问题标题】:.htaccess redirects to remove php and redirect to https and non-www.htaccess 重定向以删除 php 并重定向到 https 和非 www
【发布时间】:2026-01-05 19:05:01
【问题描述】:

我的.htaccess 文件中有以下内容

  • 删除 www
  • 重定向到 https
  • 删除.php

这是我的 .htaccess:

# ----------------------------------------------------------------------
# | Redirect to HTTPS & remove www                                     |
# ----------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301] 

# ----------------------------------------------------------------------
# | Remove .php extension                                              |
# ----------------------------------------------------------------------
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]

当我在 Firefox 中查看该网站时,我收到以下错误:

页面未正确重定向。 此问题有时可能是由禁用或拒绝接受 cookie 引起的

Chrome 会警告重定向过多

URL 已更新为我所期望的(删除了 www 并添加了 https)。没有其他有效的重定向

谁能发现我哪里出错了?

【问题讨论】:

  • 我看不到任何会导致重定向循环的东西。一定有冲突,比如其他规则?您能说出重定向循环生成的网址吗?这将有助于调试它
  • 嗨 Justin - 生成的 url 是正确的,并且没有其他重定向规则。我已更新问题以包含此信息
  • 其实,你看到的不是你得到的,证明是重定向循环。你能看看 Chrome 的网络控制台看看有什么问题吗?这样,我们将看到什么是重定向循环,并且我们可以确定问题的根源。您有一个配置为仅接受 httpwww(或两者)的 CMS(是吗?)的可能性很高,这将解释重定向循环。
  • 您的 Apache 版本是多少?尝试替换RewriteCond %{HTTPS} off [OR]wiithRewriteCond %{REQUEST_SCHEME} =http
  • 检查这个问题*.com/questions/43242712/…

标签: .htaccess


【解决方案1】:

您的 .htaccess 文件中似乎需要以下内容:

# ----------------------------------------------------------------------
# | Redirect to HTTPS & remove www                                     |
# ----------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [OR]
RewriteCond %{https} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# ----------------------------------------------------------------------
# | Remove .php extension                                              |
# ----------------------------------------------------------------------
RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/?$ /$1.php [END]

这是从以下类似主题的公认答案中借用的:

.htaccess - Remove www, force https, remove php and remove trailing slash

【讨论】:

    【解决方案2】:

    在您的 .htaccess 文件中尝试以下代码:

    RewritEengine on
    Options +FollowSymlinks
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://example.com/$1 [r=301,nc]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    

    【讨论】: