httpd.conf mod_rewrite HTTPS 并删除 PHP 扩展
Posted
技术标签:
【中文标题】httpd.conf mod_rewrite HTTPS 并删除 PHP 扩展【英文标题】:httpd.conf mod_rewrite HTTPS and remove PHP extension 【发布时间】: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
但无济于事。
任何帮助都会很棒。
【问题讨论】:
【参考方案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。 对不起,我犯了一个错误。你可以看到我编辑过的答案以上是关于httpd.conf mod_rewrite HTTPS 并删除 PHP 扩展的主要内容,如果未能解决你的问题,请参考以下文章
XAMPP httpd.conf 设置以允许 mod_rewrite 规则
Apache mod_rewrite 适用于 .htaccess 但不适用于 httpd.conf