2015-04-21 1 views
3

Я застрял на этом целую вечность. Я не могу заставить httpd.conf переписать URL-адреса, чтобы добавить https (если он не используется) и удалить расширение .php. Я могу получить либо работу, но не оба одновременно. https://example.com/index дает ошибку 404, когда существует index.php.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

Извините, я допустил ошибку. Вы можете увидеть мой отредактированный ответ об этом –