【问题标题】:Redirect to https but without .php重定向到 https 但没有 .php
【发布时间】:2017-04-14 17:05:34
【问题描述】:

现在我有一个 https。我需要在.htaccess 中进行重定向。我可以找到这个:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

但我发现如果用户写:

http://myDomain/someFile

它重定向到:

https://myDomain/someFile.php

我想正确的应该是没有 .php 该怎么做?

这些都是规则:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

【问题讨论】:

    标签: regex https


    【解决方案1】:

    这里是您的问题的工作代码。我已经在我的服务器上检查了它,它工作正常

    RewriteEngine on
    RewriteBase /
    
    #for https
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
    RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^/?(.*)$ /$1.php [L]
    

    这里是上面代码的解释链接-Explain htaccess rules?

    【讨论】:

    • 你能解释一下你的代码吗?我不明白
    • 您在您的网站上尝试过吗?只需将您当前的 .htaccess 文件重命名为 .htaccess.bak 并通过创建一个新的 .htaccess 文件来使用此代码。它肯定会起作用。
    • 它似乎有效,但我需要时间研究它。这让我很复杂。我会尽快说些什么
    • 由于此答案解决了您的问题,我请求您将此答案标记为已接受。谢谢!
    • 我以为我只需要接受答案。我阅读了说明,发现我也必须点击 +50 图标。我希望这能解决问题
    【解决方案2】:

    关闭MultiViews 让您的 .htaccess 保持不变。选项MultiViews(参见http://httpd.apache.org/docs/2.4/content-negotiation.html)由运行before mod_rewriteApache's content negotiation module 使用,并使Apache 服务器匹配文件的扩展名。因此,如果 /file 是 URL,那么 Apache 将提供 /file.php

    您还可以将wwwhttp 规则组合成一个规则,以避免多个301 重定向。

    Options -MultiViews
    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
    

    确保在测试此更改之前清除浏览器缓存。

    【讨论】:

    • 在最后一行,为什么是 (.+?) 而不仅仅是 (.*)
    • .* 匹配 0 个或多个字符并且在空白 URI 前添加 .php 是不可能的。除了我的规则还允许尾随/
    • 我删除了 .htaccess 中的所有内容,只放入您的代码并清空缓存。然后没有任何效果。没有错误,只是一个空白页
    • 您在浏览器中输入了什么网址进行测试?签入 Chrome 开发工具,看看你在浏览器中得到了什么响应代码?
    • www 和 https 工作正常。问题出在 .php 如果我不放 .php 我什么也看不到。 Google 控制台显示加载资源失败
    【解决方案3】:

    如果您使用 php,那么您可能拥有 Apache。你应该找到你的 .conf 文件。我在

    /etc/apache2/sites-available/000-default.conf (Kubuntu 16.04.)
    

    并更改虚拟主机设置:

    <VirtualHost *:80>
        . . .
    
        Redirect "/" "https://your_domain_or_IP/"
    
        . . .
    </VirtualHost>
    

    【讨论】:

    • 我询问了我的托管服务提供商,但我无权访问 .config。看来我唯一的选择是 .httaccess
    【解决方案4】:

    在您的 .htaccess 中试一试(在您的 public_html 的根目录中) p>

    #FORCE HTTPS CONNECTION
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://yourDomain.com/$1 [R=301,L]
    #FORCE HTTPS CONNECTION
    

    如果成功了请告诉我 ;)

    【讨论】:

    • 它不起作用,问题仍然存在。为什么你认为它应该有效?
    【解决方案5】:

    如果要将http重定向到https,请使用以下重定向代码:

    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://yourDomain.com/$1 [R=301,L]
    

    【讨论】:

    • 你有没有注意到你的代码和mkseen一模一样?
    猜你喜欢
    • 2017-07-14
    • 2018-07-02
    • 2019-04-06
    • 2017-08-21
    • 2018-06-18
    • 2016-07-06
    • 2018-01-21
    • 2017-11-15
    • 2017-07-13
    相关资源
    最近更新 更多