https重定向的.htaccess问题

时间:2017-11-23 10:21:58

标签: .htaccess mod-rewrite

我刚刚将我的网站从HTTP升级到了HTTPS,之前完美运行的.htaccess现在表现得很奇怪。我在那里有以下内容:

  • 删除尾部斜杠
  • 删除php扩展程序

......加上其他人,但我想这些都是有问题的。

我在一个示例页面上获得的行为是:

我错过了一些明显的东西吗?代码是:

justifyContent

1 个答案:

答案 0 :(得分:0)

对于此特定问题,用于删除尾随/.php扩展名的重写规则不应在替换中使用完整的URL。您也可以考虑重新安排其中一些规则。

更新示例:

Require all granted

DirectoryIndex index.php

# Secure text files
<Files ~ "\.txt$">
  Require all denied
</Files>

ErrorDocument 404 /404.php

RewriteEngine On

# Redirect HTTP to HTTPS and non-www to www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,R=301,L]

# Resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [NC,L]

这里有几点需要注意:

  • 修改了上述指令以使用更新的apache 2.4语法
  • RewriteEngine on指令应该在其他重写规则之前
  • HTTP -> HTTPSnon-www -> www重定向逻辑可以在一次操作中完成
  • 应该在没有完整URL的情况下完成PHP扩展剥离和后续重新映射,以避免您观察到的重复行为。最后一点应解决问题。

如果您需要有关此处使用的某些语法的更多信息,可以查看mod_rewrite文档。