【问题标题】:httpd.conf mod_rewrite HTTPS and remove PHP extensionhttpd.conf mod_rewrite HTTPS 并删除 PHP 扩展
【发布时间】:2015-06-29 03:47:50
【问题描述】:

我多年来一直坚持这一点。 我似乎无法让 httpd.conf 重写 URL 以添加 https(如果它未被使用)并删除 .php 扩展名。 我可以让其中一个工作,但不能同时工作。当 index.php 存在时,https://example.com/index 会出现 404 错误。

所以我要做的就是将诸如 example.com/index.php 之类的 URL 转换为 https://example.com/index

如果我关闭强制 HTTPS 规则,它会起作用。
httpd.conf:

RewriteEngine On
RewriteRule ^(.*)$  $1.php  [QSA]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule $ https://example.com/ [L,R]
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* – [F,L]

我添加了多个规则,例如:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L]

还有:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)?$ $1.php

但无济于事。

任何帮助都会很棒。

【问题讨论】:

    标签: php apache mod-rewrite https httpd.conf


    【解决方案1】:

    这应该按预期工作。

    为您的http

    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
    RewriteRule ^/(.*)$ /$1.php [L,QSA]
    
    RewriteCond %{HTTP_USER_AGENT} libwww-perl
    RewriteRule ^ – [F]
    

    对于您的 https (ssl) 块

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
    RewriteRule ^/(.*)$ /$1.php [L,QSA]
    
    RewriteCond %{HTTP_USER_AGENT} libwww-perl
    RewriteRule ^ – [F]
    

    注意:我建议您在根文件夹中使用 htaccess(ssl 文档根文件夹必须与“http”域相同)。这样,您将不会有拆分/重复代码

    【讨论】:

    • 感谢您的建议。不幸的是,我仍然得到相同的行为。如果我删除第一条规则(对于 https),然后使用 http 它可以工作。 404 如果是 https。
    • 对不起,我犯了一个错误。你可以看到我编辑过的答案
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 2013-10-11
    • 2013-04-20
    • 1970-01-01
    • 2017-09-29
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多