2015-04-21 63 views
3

我一直坚持这个很长一段时间。 我似乎无法让httpd.conf重写URL以添加https(如果未使用)并删除.php扩展名。 我可以上班,但不能同时上班。当index.php存在时,https://example.com/index会产生404错误。httpd.conf mod_rewrite HTTPS并删除PHP扩展

那么什么,我试图做的是将URL如example.com/index.php为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 

,但无济于事。

任何帮助将是伟大的。

回答

2

这应该按预期工作。

为了您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”域)。这样,您将不会有分割/重复代码

+0

感谢您的建议。不幸的是,我仍然得到同样的行为。如果我删除第一条规则(对于https),然后使用http,它可以工作。 404如果https。 – ojamer

+0

对不起,我犯了一个错误。你可以看到我编辑的答案 –