2015-04-21 100 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

對不起,我犯了一個錯誤。你可以看到我編輯的答案 –