PDA

View Full Version : کار با htaccess



mostafa_shoakry
پنج شنبه 28 اسفند 1393, 15:17 عصر
سلام
من یه سایت می خوام درست کنم می خوام url سایتم رو به localhost/webselect تغییر بدم.
با همون دستوراتی که دوستمون تو بخش آموزشی گفتن رفتم ولی باز یا خطا می ده یا به اون شکل تغییر نمیده.
تنظیمات htaccess و config رو چجوری تغییر بدم و هم در basic و هم در Advanced فایل htaccess رو کجا قرار بدم.در ضمن من از xampp تو ویندوز 7 استفاده می کنم.
ممنون

vahid78
جمعه 29 اسفند 1393, 08:43 صبح
اول باید mod_rewrite در اپاچی فعال بشه، برای اینکار فایل httpd.conf را باز کنید و خط زیر را از حالت کامنت خارج کنید


#LoadModule rewrite_module modules/mod_rewrite.so

تبدیل به:


LoadModule rewrite_module modules/mod_rewrite.so

حالا در مسیر روت پروژتون (همون محلی که index.php) وجود داره یک فایل با نام .htaccess بسازید و محتوای زیر را قرار بدید


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

اگر کار نکرد این را قرار بدید


RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

mostafa_shoakry
دوشنبه 14 اردیبهشت 1394, 16:37 عصر
سلام
من این کارارو انجام دادم مشکلم حل شد
1. یک فایل .htaccess در مسیر اصلی سایت درست کردم:


Options -Indexes

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ frontend/web/$1 [L]
</IfModule>

# Deny accessing below extensions
<Files ~ "(.json|.lock|.git)">
Order allow,deny
Deny from all
</Files>

# Deny accessing dot files
RewriteRule (^\.|/\.) - [F]



2. یک فایل .htaccess هم در مسیر frontend/web درست کردم.



RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d



3. فایل main.php رو در مسیر frontend/config/main.php رو به این شکل تغییر دادم



<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);

use \yii\web\Request;
$baseUrl = str_replace('/frontend/web', '', (new Request)->getBaseUrl());

return [
'id' => 'app-frontend',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'frontend\controllers',

'components' => [

'request' => [
'baseUrl' => $baseUrl,
],

'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
],

'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],

'errorHandler' => [
'errorAction' => 'site/error',
],

'urlManager' => [
'baseUrl' => $baseUrl,
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => []
]
],
'params' => $params,
];


الان میتونم سایت رو به صورت http://localhost/example اجرا کنم.

ParisaKiani
سه شنبه 15 اردیبهشت 1394, 11:42 صبح
ممنون از راهنمایتون

الان url سایت به http://localhost/example شده و بصورت پیش فرض frontend اجرا میشه ، برای اجرا شدن backend باید چیکار کنیم ؟؟

ParisaKiani
سه شنبه 15 اردیبهشت 1394, 11:47 صبح
ممنون از راهنمایتون

الان url سایت به http://localhost/example شده و بصورت پیش فرض frontend اجرا میشه ، برای اجرا شدن backend باید چیکار کنیم ؟؟

mostafa_shoakry
چهارشنبه 16 اردیبهشت 1394, 20:13 عصر
مثلا من الان خودم backend رو به این صورت بازش می کنم
http://localhost/example/backend/web/index.php?r=admin
ولی تنها مشکلی که دارم مثلا می خوام تو frontend به صورت زیر اجرا کنم
مثلا
http://localhost/example/site/product/id/23
اجرا نمیکنه.کدم به این شکل هست


echo \Yii::$app->urlManager->createUrl(['site/product','id' => $clashList->id,'title' => $clashList->title]);

ولی خروجی که به من میده
به شکل قدیمی یعنی


http://localhost/example/site/product?id=3&title=عنوان

کسی می دونه چجوری اینو درست کنم؟

پ.ن : در ضمن می تونی همون تغییرات htaccess رو برای backend هم اعمال کنی. با همون شرایط. فرقی ندارن

desatir7316
پنج شنبه 17 اردیبهشت 1394, 01:25 صبح
یه کپی از web توی backend بگیرید و توی مسیر اصلی پروژه به نام مثلا admin قرار بدین و آدرس های داخل فایل های index , index-test رو درست کنید
برای frontend هم محتوایات پوشه web از توی front end رو توی خود ریشه پروژه بریزید و بازم آدرس ها رو توی index , index-test درست کنید
الان برای دسترسی به سایت از آدرس localhost/mysite و برای دسترسی به بخش مدیریت از آدرس localhost/mysite/admin می تونید استفاده کنید

برای prettyUrl کنار هر دوتا index.php فایل htaccess بسازید و مقدار زیر رو توی اون بذارید :


Options +FollowSymLinks
IndexIgnore */*

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php




mod rewrite رو از آپاچی فعال کنید و آپاچی رو یه بار ریست کنید


از کانفیگ prettyUrl رو تنظیم کنید:


'components' => [
'urlManager' => [
'class' => 'yii\web\UrlManager',
'showScriptName' => false,
'enablePrettyUrl' => true,
],]


اگه از apache 2.4 استفاده می کنید لازمه برای prettyUrl این تغییر رو بدید : http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/ در غیر این صورت باید از تنظیم بالا مقدار showScriptName رو برابر true قرار بدید که در این صورت توی همه آدرس دهی هاتون index.php هم بعد از اسم سایت اضافه می شه


توی کانفیگ backend از این تنظیم برای جدا سازی session کاربر استفاده کنید که هرکس توی frontend لاگین شد نتونه به backend با همون یوزر وارد بشه:


'components' => [
'session' => [
'name' => 'BACKENDSESSID',
],]