From 30fa72127e1ab7a489afc5985c8c1fa63e49a4ee Mon Sep 17 00:00:00 2001 From: ilopX Date: Fri, 24 Jul 2015 20:05:21 +0300 Subject: [PATCH 01/31] Delete web.php --- src/config/web.php | 66 ---------------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 src/config/web.php diff --git a/src/config/web.php b/src/config/web.php deleted file mode 100644 index bfb3e12..0000000 --- a/src/config/web.php +++ /dev/null @@ -1,66 +0,0 @@ - 'basic', - 'basePath' => dirname(__DIR__), - 'bootstrap' => ['log'], - 'components' => [ - 'request' => [ - 'baseUrl' => '', - 'cookieValidationKey' => 'insert a secret key', - ], - 'urlManager' => [ - 'enablePrettyUrl' => true, - 'showScriptName' => false, - 'rules' => [ - '' => 'site/index', - ''=>'site/', - ], - ], - 'assetManager' => [ - 'basePath' => '@webroot/assets', - 'baseUrl' => '@web/assets' - ], - 'cache' => [ - 'class' => 'yii\caching\FileCache', - ], - 'user' => [ - 'identityClass' => 'app\models\User', - 'enableAutoLogin' => true, - ], - 'errorHandler' => [ - 'errorAction' => 'site/error', - ], - 'mailer' => [ - 'class' => 'yii\swiftmailer\Mailer', - // send all mails to a file by default. You have to set - // 'useFileTransport' to false and configure a transport - // for the mailer to send real emails. - 'useFileTransport' => true, - ], - 'log' => [ - 'traceLevel' => YII_DEBUG ? 3 : 0, - 'targets' => [ - [ - 'class' => 'yii\log\FileTarget', - 'levels' => ['error', 'warning'], - ], - ], - ], - 'db' => require(__DIR__ . '/db.php'), - ], - 'params' => $params, -]; - -if (YII_ENV_DEV) { - // configuration adjustments for 'dev' environment - $config['bootstrap'][] = 'debug'; - $config['modules']['debug'] = 'yii\debug\Module'; - - $config['bootstrap'][] = 'gii'; - $config['modules']['gii'] = 'yii\gii\Module'; -} - -return $config; From 047278f10ecb2e161e7778f701057b57287bc192 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 13:41:26 +0300 Subject: [PATCH 02/31] ilopX --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 70f0875..0000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -assets/* -!assets/.gitignore -protected/runtime/* -!protected/runtime/.gitignore -protected/data/*.db -themes/classic/views/ From ba3e778843e4c861df16fa56ba456afe1bd1f763 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 13:49:42 +0300 Subject: [PATCH 03/31] ilopX --- composer.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..1bbb536 --- /dev/null +++ b/composer.json @@ -0,0 +1,16 @@ +{ + "name": "ilopx/yii2-basic-htaccess", + "description": "yii2-basic-htaccess", + "authors": [ + { + "name": "ilopx", + "email": "ilopx@ukr.net" + } + ], + "require": {}, + "autoload": { + "psr-4": { + "PhilipBrown\\Nacho\\": "src" + } + } +} From cdd3921c587dc588cded5f33d51ea13face7752f Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:09:23 +0300 Subject: [PATCH 04/31] ilopX --- .gitignore | 1 + composer.json | 6 +++--- src/web/.htaccess | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57872d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/vendor/ diff --git a/composer.json b/composer.json index 1bbb536..4786109 100644 --- a/composer.json +++ b/composer.json @@ -1,16 +1,16 @@ { "name": "ilopx/yii2-basic-htaccess", - "description": "yii2-basic-htaccess", "authors": [ { "name": "ilopx", "email": "ilopx@ukr.net" } ], + "minimum-stability": "stable", "require": {}, "autoload": { - "psr-4": { - "PhilipBrown\\Nacho\\": "src" + "psr-0": { + "HelloWorld": "src/" } } } diff --git a/src/web/.htaccess b/src/web/.htaccess index 2db3492..d2e0d92 100644 --- a/src/web/.htaccess +++ b/src/web/.htaccess @@ -3,3 +3,5 @@ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # В противном случае перенаправляем на index.php RewriteRule . index.php + + From e5124a5fdd2b39e9e1293e314ea9f7c41773096a Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:14:37 +0300 Subject: [PATCH 05/31] Update README.md --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4065624..c4a17af 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ #Yii2 basic htaccess +## 1. step root/.htaccess: ``` @@ -20,6 +21,7 @@ root/.htaccess: RewriteRule ^.*$ web/index.php ``` +## 2. step root/web/.htaccess: ``` # Если это папка или файл, открываем его @@ -28,6 +30,7 @@ RewriteCond %{REQUEST_FILENAME} !-d # В противном случае перенаправляем на index.php RewriteRule . index.php ``` +## 3. step root/config/web.php: ```php 'request' => [ @@ -40,9 +43,5 @@ root/config/web.php: '' => 'site/index', ''=>'site/', ], -], -'assetManager' => [ - 'basePath' => '@webroot/assets', - 'baseUrl' => '@web/assets' -], +] ``` From bd7d03dadefffab39efad2dd930df74b5dd6a919 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:15:07 +0300 Subject: [PATCH 06/31] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c4a17af..1d68dda 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Yii2 basic htaccess ## 1. step -root/.htaccess: +### root/.htaccess: ``` Options +FollowSymlinks @@ -22,7 +22,7 @@ root/.htaccess: ``` ## 2. step -root/web/.htaccess: +### root/web/.htaccess: ``` # Если это папка или файл, открываем его RewriteCond %{REQUEST_FILENAME} !-f @@ -31,7 +31,7 @@ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php ``` ## 3. step -root/config/web.php: +### root/config/web.php: ```php 'request' => [ 'baseUrl' => '', From c225f3c16994075ad3040f6cfd1d29cdacc98ad5 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:15:33 +0300 Subject: [PATCH 07/31] Delete .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 57872d0..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/vendor/ From 906149071195951ba39b6e5220dcfe2da7ca20d4 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:15:39 +0300 Subject: [PATCH 08/31] Delete composer.json --- composer.json | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 composer.json diff --git a/composer.json b/composer.json deleted file mode 100644 index 4786109..0000000 --- a/composer.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "ilopx/yii2-basic-htaccess", - "authors": [ - { - "name": "ilopx", - "email": "ilopx@ukr.net" - } - ], - "minimum-stability": "stable", - "require": {}, - "autoload": { - "psr-0": { - "HelloWorld": "src/" - } - } -} From 74263e21dad20532af8a4a5862f4b66441f372d0 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:17:51 +0300 Subject: [PATCH 09/31] ilopX --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 1d68dda..5c5d469 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,8 @@ ## 2. step ### root/web/.htaccess: ``` -# Если это папка или файл, открываем его RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d -# В противном случае перенаправляем на index.php RewriteRule . index.php ``` ## 3. step From 0b0c955499487d312a65a98743db8a70a953f75e Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:32:59 +0300 Subject: [PATCH 10/31] ilopX --- README.md | 12 ++++-------- example.png | Bin 0 -> 29642 bytes {src => {root}}/.htaccess | 0 {src => {root}}/web/.htaccess | 0 4 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 example.png rename {src => {root}}/.htaccess (100%) rename {src => {root}}/web/.htaccess (100%) diff --git a/README.md b/README.md index 5c5d469..33e14e8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #Yii2 basic htaccess ## 1. step -### root/.htaccess: +### create file {root}/.htaccess: ``` Options +FollowSymlinks @@ -9,10 +9,6 @@ RewriteCond %{REQUEST_URI} ^/.* - #RewriteRule ^assets/(.*)$ /web/assets/$1 [L] - #RewriteRule ^css/(.*)$ web/css/$1 [L] - #RewriteRule ^js/(.*)$ web/js/$1 [L] - #RewriteRule ^images/(.*)$ web/images/$1 [L] RewriteRule ^(.*)$ web/$1 [L] RewriteCond %{REQUEST_URI} !^/web/ @@ -22,14 +18,14 @@ ``` ## 2. step -### root/web/.htaccess: +### create file {root}/web/.htaccess: ``` RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php ``` ## 3. step -### root/config/web.php: +### update file {root}/config/web.php: ```php 'request' => [ 'baseUrl' => '', @@ -41,5 +37,5 @@ RewriteRule . index.php '' => 'site/index', ''=>'site/', ], -] +], ``` diff --git a/example.png b/example.png new file mode 100644 index 0000000000000000000000000000000000000000..149ecfecf48dfc0f37b9b997575f22fdbce6a64a GIT binary patch literal 29642 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 I`S#QQ09X|m-~a#s literal 0 HcmV?d00001 diff --git a/src/.htaccess b/{root}/.htaccess similarity index 100% rename from src/.htaccess rename to {root}/.htaccess diff --git a/src/web/.htaccess b/{root}/web/.htaccess similarity index 100% rename from src/web/.htaccess rename to {root}/web/.htaccess From 0ac072023d33edadb579340455e78b18983db50b Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:38:36 +0300 Subject: [PATCH 11/31] Update README.md --- README.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 33e14e8..b362bb7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,14 @@ #Yii2 basic htaccess -## 1. step -### create file {root}/.htaccess: + +Inline-style: +![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) + +## Automatic setting +Download and run file yii2-basic-htaccess.php + +## Manual setting +### 1. step +#### create file {root}/.htaccess: ``` Options +FollowSymlinks @@ -17,15 +25,15 @@ RewriteRule ^.*$ web/index.php ``` -## 2. step -### create file {root}/web/.htaccess: +### 2. step +#### create file {root}/web/.htaccess: ``` RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php ``` -## 3. step -### update file {root}/config/web.php: +### 3. step +#### update file {root}/config/web.php: ```php 'request' => [ 'baseUrl' => '', From 4c68da466a9e3d907efd359af2ccec7b908a970d Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:38:48 +0300 Subject: [PATCH 12/31] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b362bb7..abefab2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ #Yii2 basic htaccess -Inline-style: ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) ## Automatic setting From c056a9ddf72eec1bc247a0d9dd49f8240ec520b0 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:47:31 +0300 Subject: [PATCH 13/31] ilopX --- README.md | 2 +- yii2-basic-htaccess.php | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 yii2-basic-htaccess.php diff --git a/README.md b/README.md index abefab2..6f45e25 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) ## Automatic setting -Download and run file yii2-basic-htaccess.php +Download file [yii2-basic-htaccess.php](https://github.com/ilopX/yii2-basic-htaccess/blob/master) and put to root yii application and run ## Manual setting ### 1. step diff --git a/yii2-basic-htaccess.php b/yii2-basic-htaccess.php new file mode 100644 index 0000000..72bef18 --- /dev/null +++ b/yii2-basic-htaccess.php @@ -0,0 +1,21 @@ + + Options +FollowSymlinks + RewriteEngine On + + + + RewriteCond %{REQUEST_URI} ^/.* + RewriteRule ^(.*)$ web/$1 [L] + + RewriteCond %{REQUEST_URI} !^/web/ + RewriteCond %{REQUEST_FILENAME} !-f [OR] + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^.*$ web/index.php +'); + +file_put_contents('web/.htaccess', +'RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . index.php'); From 972c1bac322b6448e014e642abbf46bf3cd18654 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:56:24 +0300 Subject: [PATCH 14/31] ilopX --- README.md | 3 ++- yii2-basic-htaccess.php => index.php | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) rename yii2-basic-htaccess.php => index.php (87%) diff --git a/README.md b/README.md index 6f45e25..503c266 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) ## Automatic setting -Download file [yii2-basic-htaccess.php](https://github.com/ilopX/yii2-basic-htaccess/blob/master) and put to root yii application and run +Download file [yii2-basic-htaccess.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) +and put to root yii2 application and start http//{your_yii2_webapp}. This script created .htaccess files automatically and clear self ## Manual setting ### 1. step diff --git a/yii2-basic-htaccess.php b/index.php similarity index 87% rename from yii2-basic-htaccess.php rename to index.php index 72bef18..214dfc7 100644 --- a/yii2-basic-htaccess.php +++ b/index.php @@ -19,3 +19,6 @@ 'RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php'); + +unlink(__FILE__); +header("Location: " . "http://" . $_SERVER['HTTP_HOST']); From 08dab5ee99a3787b3c3189aa4f2e72128475ac7d Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 14:58:11 +0300 Subject: [PATCH 15/31] ilopX --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 503c266..50d4abe 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) ## Automatic setting -Download file [yii2-basic-htaccess.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) +Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) and put to root yii2 application and start http//{your_yii2_webapp}. This script created .htaccess files automatically and clear self ## Manual setting From 3a64dc820c8980e3f7e34b6722185038bdacb2ff Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:00:24 +0300 Subject: [PATCH 16/31] ilopX --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 50d4abe..8ba9677 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ ## Automatic setting Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) -and put to root yii2 application and start http//{your_yii2_webapp}. This script created .htaccess files automatically and clear self +and put to root yii2 application and start http//{your_yii2_webapp}. +This script created .htaccess files automatically and clear self. ## Manual setting ### 1. step From 81b27e8fa349b8e978ada429612b390b77dcc977 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:39:10 +0300 Subject: [PATCH 17/31] ilopX --- index.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/index.php b/index.php index 214dfc7..abc6796 100644 --- a/index.php +++ b/index.php @@ -1,4 +1,5 @@ Options +FollowSymlinks @@ -22,3 +23,5 @@ unlink(__FILE__); header("Location: " . "http://" . $_SERVER['HTTP_HOST']); + + From 60ba3ab15343560457e07ee83b5c992659c2faea Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:46:55 +0300 Subject: [PATCH 18/31] ilopX --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8ba9677..6332825 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,16 @@ ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) -## Automatic setting -Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) -and put to root yii2 application and start http//{your_yii2_webapp}. -This script created .htaccess files automatically and clear self. +## a. Automatic setting +This method created .htaccess files automatically and clear self. -## Manual setting ++ Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) ++ Put to root yii2 application and. ++ Start http//{your_yii2_webapp} ++ Follow step 3 in Manual setting + + +## b. Manual setting ### 1. step #### create file {root}/.htaccess: ``` From b0f1f00b4aa8c57637ecd01ddf3779160b236bbd Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:49:07 +0300 Subject: [PATCH 19/31] ilopX --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6332825..f5a253c 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,9 @@ This method created .htaccess files automatically and clear self. + Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) -+ Put to root yii2 application and. -+ Start http//{your_yii2_webapp} -+ Follow step 3 in Manual setting - ++ Put to root yii2 application ++ Start http://{your_yii2_webapp} ++ Follow [step 3 in Manual setting](#3-step) ## b. Manual setting ### 1. step From a0699973542a03638c7d8da9e01c34afaa06a822 Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:51:19 +0300 Subject: [PATCH 20/31] ilopX --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index f5a253c..c6bf22f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ This method created .htaccess files automatically and clear self. + Start http://{your_yii2_webapp} + Follow [step 3 in Manual setting](#3-step) +### Video Demo +[![Video Demo](http://img.youtube.com/vi/0sxqNaznhlc/0.jpg)](http://www.youtube.com/watch?v=0sxqNaznhlc) + ## b. Manual setting ### 1. step #### create file {root}/.htaccess: From bac37bff4378c89fbcf02df787d50225c0d4acce Mon Sep 17 00:00:00 2001 From: ilopX Date: Thu, 30 Jul 2015 15:52:30 +0300 Subject: [PATCH 21/31] ilopX --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c6bf22f..277714d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This method created .htaccess files automatically and clear self. + Follow [step 3 in Manual setting](#3-step) ### Video Demo -[![Video Demo](http://img.youtube.com/vi/0sxqNaznhlc/0.jpg)](http://www.youtube.com/watch?v=0sxqNaznhlc) +[![Video Demo](http://img.youtube.com/vi/0sxqNaznhlc/1.jpg)](http://www.youtube.com/watch?v=0sxqNaznhlc) ## b. Manual setting ### 1. step From 21c5753a6a92ef8a07b1a3772090e4a63a6f6ebd Mon Sep 17 00:00:00 2001 From: ilopX Date: Sat, 22 Aug 2015 19:45:50 +0300 Subject: [PATCH 22/31] ilopX --- .gitattributes | 2 ++ .gitignore | 2 ++ composer.json | 20 +++++++++++++ src/Install.php | 16 +++++++++++ index.php => src/index.php | 4 +++ test/run.php | 59 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 composer.json create mode 100644 src/Install.php rename index.php => src/index.php (93%) create mode 100644 test/run.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ba01146 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +{root} export-ignore +test export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cb756e9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +vendor +.idea \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..dda40db --- /dev/null +++ b/composer.json @@ -0,0 +1,20 @@ +{ + "name": "ilopx/yii2-basic-htaccess", + "description": "Set web directory in webroot", + "minimum-stability": "stable", + "license": "MIT", + "authors": [ + { + "name": "ilopX", + "email": "ilopX@ukr.net" + } + ], + "autoload":{ + "psr-4":{ + "ilopx\\yii2basichtaccess\\": "src/" + } + }, + "post-package-install": [ + "ilopx\\yii2basichtaccess\\Install::postInstallCmd" + ] +} \ No newline at end of file diff --git a/src/Install.php b/src/Install.php new file mode 100644 index 0000000..471454e --- /dev/null +++ b/src/Install.php @@ -0,0 +1,16 @@ +'); +if (!is_dir('web')){ + mkdir('web'); +} + file_put_contents('web/.htaccess', 'RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d diff --git a/test/run.php b/test/run.php new file mode 100644 index 0000000..7fad3cc --- /dev/null +++ b/test/run.php @@ -0,0 +1,59 @@ +postInstallCmd(); + +if (file_exists('index.php')){ + throw new Exception("File \"index.php\" not self clear"); +}else{ + echo "clear /web/.htaccess -> ok\n"; +} + +if (!file_exists('.htaccess')){ + throw new Exception("File \"{root}/.htaccess\" not created\n"); +} +else{ + echo "create /.htaccess -> ok\n"; +} + +if (!file_exists('web/.htaccess')){ + throw new Exception("File \"{root}/web/.htaccess\" not created\n"); +} +else{ + echo "create /web/.htaccess -> ok\n"; +} + +echo "All -> ok\n"; +clear(); + From 4f0c5b191046aeaa7c07716d1d18436757192b45 Mon Sep 17 00:00:00 2001 From: ilopX Date: Sat, 22 Aug 2015 20:03:17 +0300 Subject: [PATCH 23/31] ilopX --- .gitattributes | 6 ++++++ .gitignore | 3 ++- composer.json | 2 +- src/Install.php | 16 ---------------- src/index.php | 31 ------------------------------- 5 files changed, 9 insertions(+), 49 deletions(-) delete mode 100644 src/Install.php delete mode 100644 src/index.php diff --git a/.gitattributes b/.gitattributes index ba01146..143a2b6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,8 @@ {root} export-ignore test export-ignore +.gitignore +.gitattributes +composer.json +example.png +README.md + diff --git a/.gitignore b/.gitignore index cb756e9..40a334f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -vendor +vendor/autoload.php +vendor/composer .idea \ No newline at end of file diff --git a/composer.json b/composer.json index dda40db..90bfc03 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "autoload":{ "psr-4":{ - "ilopx\\yii2basichtaccess\\": "src/" + "ilopx\\yii2basichtaccess\\": "vendor/ilopx/yii2-basic-htaccess" } }, "post-package-install": [ diff --git a/src/Install.php b/src/Install.php deleted file mode 100644 index 471454e..0000000 --- a/src/Install.php +++ /dev/null @@ -1,16 +0,0 @@ - - Options +FollowSymlinks - RewriteEngine On - - - - RewriteCond %{REQUEST_URI} ^/.* - RewriteRule ^(.*)$ web/$1 [L] - - RewriteCond %{REQUEST_URI} !^/web/ - RewriteCond %{REQUEST_FILENAME} !-f [OR] - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^.*$ web/index.php -'); - -if (!is_dir('web')){ - mkdir('web'); -} - -file_put_contents('web/.htaccess', -'RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule . index.php'); - -unlink(__FILE__); -header("Location: " . "http://" . $_SERVER['HTTP_HOST']); - - From ad1dfafb8ec769be982316368e68a897a9de8b33 Mon Sep 17 00:00:00 2001 From: ilopX Date: Sat, 22 Aug 2015 20:06:06 +0300 Subject: [PATCH 24/31] ilopX --- .gitattributes | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitattributes b/.gitattributes index 143a2b6..9b9ac94 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,8 @@ {root} export-ignore test export-ignore -.gitignore -.gitattributes -composer.json -example.png -README.md +.gitignore export-ignore +.gitattributes export-ignore +composer.json export-ignore +example.png export-ignore +README.md export-ignore From 0010335155782111bc1776a4c8198d91e8318bd1 Mon Sep 17 00:00:00 2001 From: ilopX Date: Sun, 23 Aug 2015 01:12:04 +0300 Subject: [PATCH 25/31] ilopX --- .gitattributes | 8 -------- .gitignore | 3 --- composer.json | 8 -------- index.php | 34 +++++++++++++++++++++++++++++++ test/Util.php | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/run.php | 49 +++++++++++++-------------------------------- 6 files changed, 102 insertions(+), 54 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .gitignore create mode 100644 index.php create mode 100644 test/Util.php diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 9b9ac94..0000000 --- a/.gitattributes +++ /dev/null @@ -1,8 +0,0 @@ -{root} export-ignore -test export-ignore -.gitignore export-ignore -.gitattributes export-ignore -composer.json export-ignore -example.png export-ignore -README.md export-ignore - diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 40a334f..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/autoload.php -vendor/composer -.idea \ No newline at end of file diff --git a/composer.json b/composer.json index 90bfc03..00431ec 100644 --- a/composer.json +++ b/composer.json @@ -8,13 +8,5 @@ "name": "ilopX", "email": "ilopX@ukr.net" } - ], - "autoload":{ - "psr-4":{ - "ilopx\\yii2basichtaccess\\": "vendor/ilopx/yii2-basic-htaccess" - } - }, - "post-package-install": [ - "ilopx\\yii2basichtaccess\\Install::postInstallCmd" ] } \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..d581057 --- /dev/null +++ b/index.php @@ -0,0 +1,34 @@ + + Options +FollowSymlinks + RewriteEngine On + + + + RewriteCond %{REQUEST_URI} ^/.* + RewriteRule ^(.*)$ web/$1 [L] + RewriteCond %{REQUEST_URI} !^/web/ + RewriteCond %{REQUEST_FILENAME} !-f [OR] + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^.*$ web/index.php + +END +); + +if (!is_dir('web')){ + mkdir('web'); +} + +file_put_contents('web/.htaccess', <<clear(); + } + + function clear(){ + foreach($this->clearFiles as $file){ + if (file_exists($file)) + unlink($file); + } + + foreach($this->clearFiles as $file){ + if (is_dir($dir = dirname($file)) && $dir != '.') + rmdir($dir); + } + } + + function runIndexFile(){ + $fileIndex = dirname(__DIR__).'/index.php'; + if (file_exists($fileIndex)){ + copy($fileIndex, 'index.php'); + $this->msg('run "index.php"'); + exec('php '.__DIR__.'\index.php'); + }else{ + throw new Exception("File \"$fileIndex\"' not exists"); + } + } + + function ok($msg){ + echo "$msg -> ok\n"; + } + + function error($msg){ + throw new Exception($msg); + } + + function msg($msg){ + echo "$msg\n"; + } +} \ No newline at end of file diff --git a/test/run.php b/test/run.php index 7fad3cc..e6467e9 100644 --- a/test/run.php +++ b/test/run.php @@ -1,59 +1,38 @@ runIndexFile(); -function clear(){ - $files = [ - 'index.php', - '.htaccess', - 'web\.htaccess' - ]; - - foreach($files as $file){ - if (file_exists($file)) - unlink($file); - } - - foreach($files as $file){ - if (is_dir($dir = dirname($file)) && $dir != '.') - rmdir($dir); - } -} - -clear(); - -$install = new Install(); -$install->postInstallCmd(); - -if (file_exists('index.php')){ - throw new Exception("File \"index.php\" not self clear"); +if (file_exists(__DIR__.'\index.php')){ + $util->error("File \"index.php\" not self clear"); }else{ - echo "clear /web/.htaccess -> ok\n"; + $util->ok('Self clear "index.php"'); } if (!file_exists('.htaccess')){ - throw new Exception("File \"{root}/.htaccess\" not created\n"); + $util->error("File \"\\.htaccess\" not created"); } else{ - echo "create /.htaccess -> ok\n"; + $util->ok("Create file \"\\.htaccess\""); } if (!file_exists('web/.htaccess')){ - throw new Exception("File \"{root}/web/.htaccess\" not created\n"); + $util->error("File \"\\web\\.htaccess\" not created"); } else{ - echo "create /web/.htaccess -> ok\n"; + $util->ok("Create file \"\\web\\.htaccess\""); } -echo "All -> ok\n"; -clear(); +$util->ok("All"); + +$util->clear(); From 29b0738df985d8bbe7573e2a317117c1745375ca Mon Sep 17 00:00:00 2001 From: ilopX Date: Sun, 23 Aug 2015 01:14:01 +0300 Subject: [PATCH 26/31] ilopX --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 277714d..74335a6 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## a. Automatic setting This method created .htaccess files automatically and clear self. -+ Download file [index.php](https://raw.githubusercontent.com/ilopX/yii2-basic-htaccess/master/index.php) ++ Download file [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) + Put to root yii2 application + Start http://{your_yii2_webapp} + Follow [step 3 in Manual setting](#3-step) From 6be3223a9a2009bcad7198652d60e650dbf0cc2f Mon Sep 17 00:00:00 2001 From: ilopX Date: Sun, 23 Aug 2015 01:21:39 +0300 Subject: [PATCH 27/31] ilopX --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74335a6..b140e5a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## a. Automatic setting This method created .htaccess files automatically and clear self. -+ Download file [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) ++ Download file [**index.php**](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) or **composer require ilopx/yii2-basic-htaccess** + Put to root yii2 application + Start http://{your_yii2_webapp} + Follow [step 3 in Manual setting](#3-step) From 49c4daafb02c4f8a588bffb6ac1c6cd7f51600ac Mon Sep 17 00:00:00 2001 From: ilopX Date: Mon, 24 Aug 2015 14:57:37 +0300 Subject: [PATCH 28/31] Ignore example.png to release --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..449ce51 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +example.png export-ignore \ No newline at end of file From 91f030e9dbc59055bb52c73e9c76c997f5da5ada Mon Sep 17 00:00:00 2001 From: ilopX Date: Mon, 24 Aug 2015 14:58:51 +0300 Subject: [PATCH 29/31] Ignore example.png to release --- .gitignore | 1 + index.php | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/index.php b/index.php index d581057..57817cc 100644 --- a/index.php +++ b/index.php @@ -1,5 +1,4 @@ Options +FollowSymlinks From f7f488afb0fb00ab8a9d0a96909bb0425554c319 Mon Sep 17 00:00:00 2001 From: ilopX Date: Mon, 24 Aug 2015 16:56:29 +0300 Subject: [PATCH 30/31] add Options +SymLinksIfOwnerMatch --- README.md | 11 ++++++----- index.php | 2 +- {root}/.htaccess | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b140e5a..7ed3ba8 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,17 @@ ![Demo](https://github.com/ilopX/yii2-basic-htaccess/blob/master/example.png) -## a. Automatic setting +## Video Demo +[![Video Demo](http://img.youtube.com/vi/0sxqNaznhlc/0.jpg)](http://www.youtube.com/watch?v=0sxqNaznhlc) + +## a. Automatic setting [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) This method created .htaccess files automatically and clear self. -+ Download file [**index.php**](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) or **composer require ilopx/yii2-basic-htaccess** ++ Download file [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) + Put to root yii2 application + Start http://{your_yii2_webapp} + Follow [step 3 in Manual setting](#3-step) -### Video Demo -[![Video Demo](http://img.youtube.com/vi/0sxqNaznhlc/1.jpg)](http://www.youtube.com/watch?v=0sxqNaznhlc) - ## b. Manual setting ### 1. step #### create file {root}/.htaccess: @@ -32,6 +32,7 @@ This method created .htaccess files automatically and clear self. RewriteRule ^.*$ web/index.php ``` + ### 2. step #### create file {root}/web/.htaccess: ``` diff --git a/index.php b/index.php index 57817cc..da276b8 100644 --- a/index.php +++ b/index.php @@ -1,7 +1,7 @@ - Options +FollowSymlinks + Options +SymLinksIfOwnerMatch RewriteEngine On diff --git a/{root}/.htaccess b/{root}/.htaccess index 821312b..6cbafe7 100644 --- a/{root}/.htaccess +++ b/{root}/.htaccess @@ -1,5 +1,5 @@ - Options +FollowSymlinks + Options +SymLinksIfOwnerMatch RewriteEngine On From 5187ecee657c0ec1cde3df6a2db3c0681655cc4f Mon Sep 17 00:00:00 2001 From: ilopX Date: Mon, 24 Aug 2015 16:59:24 +0300 Subject: [PATCH 31/31] add Options +SymLinksIfOwnerMatch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ed3ba8..04640f4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ## a. Automatic setting [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) This method created .htaccess files automatically and clear self. -+ Download file [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) ++ Download file [index.php](https://cdn.rawgit.com/ilopX/yii2-basic-htaccess/master/index.php) or composer require ilopx/yii2-basic-htaccess + Put to root yii2 application + Start http://{your_yii2_webapp} + Follow [step 3 in Manual setting](#3-step)