【问题标题】:.htaccess - Remove www, force https, remove php and remove trailing slash.htaccess - 删除 www、强制 https、删除 php 并删除尾部斜杠
【发布时间】:2017-08-31 17:57:19
【问题描述】:

我正在尝试以最少的重定向来归档以下内容;

  • 删除万维网
  • 强制 HTTPS
  • 删除php扩展
  • 删除结尾的斜杠

到目前为止我所拥有的和正在工作的:

RewriteEngine On

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

# FORCE HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# REMOVE TRAILING SLASH
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

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

当前行为:

http://www.example.com/functions.php -> https://example.com/functions

(适用于 4 个重定向)

http://www.example.com/functions/ -> https://example.com/functions

(适用于 4 个重定向)

有没有人有任何建议如何以尽可能少的重定向来完成这项工作?

【问题讨论】:

标签: php apache .htaccess redirect mod-rewrite


【解决方案1】:

始终重写为 https 并一步丢失 www 并没有什么坏处。尾部斜杠未更改,但通过反转 Cond 删除 php-extensions 时丢失了一行。

# REMOVE WWW & FORCE HTTPS
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [OR]
RewriteCond %{https} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# REMOVE TRAILING SLASH
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# REMOVE PHP EXTENSION if there's no file with this name
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301]

如果您还需要处理请求为 file/ 而没有 .php 的文件,您应该在最后部分保留您的代码:

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

【讨论】:

  • 第一部分结合去除www和强制https作品。删除 extionsion 的最后一部分不起作用。但现在更好了,我只有 3 个重定向。
  • 您想在请求的文件实际上不存在时删除.php,对吗?为此,您有两条规则,首先,如果请求的 URI 以 something.php 结尾,则您重写为 /something。其次,当请求文件名.php 并且实际存在时,URI 的最后一部分被.php 获取和扩展。因此,简短的版本将仅在文件不存在时删除 .php。我的规则就是这样做的:/ RewriteCond 如果请求的文件不存在,那么它就会删除.php
  • 只有第二部分,如果有一个名为 %{REQUEST_FILENAME}.php 的文件,则添加 .php 未处理,因为它不是您原始问题的一部分,但如果应该这样做同样,那么您应该遵守最后一个规则集。相应地编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多