Apache 使用mod_write for cleanURL和let Encrypt

Apache 使用mod_write for cleanURL和let Encrypt,apache,.htaccess,mod-rewrite,encryption,Apache,.htaccess,Mod Rewrite,Encryption,我已经在Ubuntu 14.04上运行Apache的服务器上启用了Let's Encrypt,并使用自动选项将所有http请求重新定向到https。这很好用 但是,我现在想使用mod_rewrite在我的站点上使用cleanURL——我需要做的就是从所有文件名中删除.php扩展名。(例如,前往的路线) 我已尝试将以下重写规则添加到.htaccess文件: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{RE

我已经在Ubuntu 14.04上运行Apache的服务器上启用了Let's Encrypt,并使用自动选项将所有http请求重新定向到https。这很好用

但是,我现在想使用mod_rewrite在我的站点上使用cleanURL——我需要做的就是从所有文件名中删除.php扩展名。(例如,前往的路线)

我已尝试将以下重写规则添加到.htaccess文件:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
此配置在我的localhost设置(没有SSL)上运行良好,但在运行Lets Encrypt的实例上不起作用

我已经通过添加此规则测试了.htaccess是否正常工作(将所有www请求重定向到根域)

我怀疑let Encrypt auto setup选项和我的mod_rewrite规则之间可能存在一些冲突,但我一直无法确定如何让它们一起工作


任何帮助都将不胜感激。

.htaccess
中禁用
多视图

Options -MultiViews
多视图(mod_协商的一部分)可能导致冲突。这与您试图使用mod_rewrite实现的功能非常相似。在启用多视图的情况下(可能在服务器配置中启用,尽管默认设置已禁用),对
/filename
的请求将导致Apache通过单步遍历该目录中的文件来查找匹配的文件(该文件将返回适当的mime类型)(基本上是在basename匹配的地方尝试各种扩展)

我已经检查了请求文件名返回的内容-它是文件名的路径(例如,[请求文件名]=>/var/www/sitename/public\u html/output.php)


是的,这就是问题所在。在mod_rewrite能够完成它的工作之前,MultiView已经“修复”了URL(
output
output.php
)。

将所有http请求重新定向到https的自动选项实际上做了什么?重定向是如何实现的?次要问题(这实际上不会改变任何事情),但无需在重写condTestString中转义点-这是一个普通字符串,不是正则表达式。据我所知,它将以下内容添加到sitename.conf Apache虚拟主机文件
RewriteEngine on RewriteCond%{SERVER\u NAME}=sitename[或]RewriteCond%{SERVER\u NAME}=www.sitename RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI}[END,QSA,R=permanent]
自动选项还创建了第二个名为“sitename le ssl.conf”的apache conf文件。我已经检查了
REQUEST_FILENAME
返回的内容-它是文件名的路径(例如,[REQUEST_FILENAME]=>/var/www/sitename/public_html/output.php)-我使用不同的文件路径在本地主机上运行相同的结果。我还按照您的建议启用了详细日志记录,并且可以看到与重写相关的错误。例如,
RewriteCond:input='/var/www/sitename/public\u html/output.php'pattern='-f'=>不匹配
似乎.php文件扩展名已重复-这可能是问题的根源吗?这已经解决了问题,谢谢。多视图(我不知道)大概也解释了为什么“cleanURL”似乎已经适用于.html文件(没有任何mod_重写规则)是的,多视图可以解释为什么“干净的”
.html
URL神奇地工作正常。与
.php
URL的冲突(这最终破坏了您的站点,启用了多视图-我想是404(?)很可能是“其他地方”。添加
.php
扩展名的mod_rewrite指令(在您的问题中)将失败(因为前面的文件检查条件将失败)。我假设您的www到非www规范重定向将“神奇地”重定向到
.php
URL?
Options -MultiViews