2016-12-20 62 views
4

我已經開始學習yii2了,我試圖做漂亮的網址,但是失敗了。我做了什麼: -漂亮的網址在yii2中不起作用

在配置/ web.php(我在下面編輯):

'urlManager' => [ 
     'class' => 'yii\web\UrlManager', 
     // Hide index.php 
     'showScriptName' => false, 
     // Use pretty URLs 
     'enablePrettyUrl' => true, 
     'rules' => [ 
     ], 

然後我創建了一個.htaccess文件,並把它放在根目錄(它有下面的代碼):

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 

此外,我已經打開apache2.conf文件,改變這樣的:

<Directory /var/www/> 
    Options Indexes FollowSymLinks 
    AllowOverride All <! -- instead of none --> 
    Require all granted 
</Directory> 

我也檢查過該命令的變化:

grep -R AllowOverride /etc/apache2 

它顯示一個如下:

/etc/apache2/apache2.conf: AllowOverride All <!-- It is showing that done --> 

現在:

當我進入我的頁面通過:

http://localhost/yii2/web/

它打開,當我將鼠標懸停在關於鏈接它顯示我:http://localhost/yii2/web/site/about(這表明相當的URL女傭)

但這個URL不起作用(說404發現)

我曾嘗試下面的帖子每個代碼:

How to access a controller with pretty url in Yii2

Enable clean URL in Yii2

+0

哪裏是你的文件系統上的應用程序?即其路徑。 – SaidbakR

+0

很明顯,'.htaccess'設置不起作用。嘗試爲該目錄添加一個配置,而不是/除了'/ var/www /',即將其定義爲'var/www/html/yii2/web'或者最好設置你的yii的web目錄項目作爲虛擬主機。 – SaidbakR

+0

是的,但我認爲,不知道,你必須刪除**斜線**,並且'.htaac​​ess'應該放在你的應用程序的'web'目錄下。 – SaidbakR

回答

6

最後我做了工作: -

1.創建兩個。htacces文件(一個根,一個在我的應用程序的Web文件夾): -

根的.htaccess: -

<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine On 
</IfModule> 

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

    RewriteCond %{REQUEST_URI} !^/web/ 
    RewriteCond %{REQUEST_FILENAME} !-f [OR] 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^.*$ web/index.php 
</IfModule> 

Web文件夾的.htaccess: -

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 

2.In配置/ web.php: -

'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
     // Your rules here 
     ], 
    ], 

3.(apache2.conf)變更的象下面這樣: -

<Directory /var/www/html/> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 

4.然後運行以下命令: -

a。sudo /etc/init.d/apache2 stop(停止阿帕奇)

sudo killall apache2(殺死過程和檢查過程不運行)

℃。sudo netstat -l|grep www(檢查端口80是不使用現在)

d。sudo /etc/init.d/apache2 restart(重啓Apache)

現在一切正常。

順便感謝每一位試圖幫助我的人。採取

參考: -

https://www.my-yii.com/forum/topic/how-to-set-up-pretty-urls-in-yii2-basic-template

https://askubuntu.com/questions/48362/how-to-enable-mod-rewrite-in-apache

5

你爲什麼不只是給你web.php文件中的規則?像如下:

'urlManager' => [ 
     'class' => 'yii\web\UrlManager', 
     // Disable index.php 
     'showScriptName' => false, 
     // Disable r= routes 
     'enablePrettyUrl' => true, 
     'rules' => array(
       '<controller:\w+>/<id:\d+>' => '<controller>/view', 
       '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
       '<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
     ), 
    ], 

我在這裏設置的規則只是一個例子,你可以設置它的方式,你希望你的url看起來像。

編輯: 如果它不是還在工作,嘗試與設置虛擬主機而不是:

<Directory "/var/www/html/yii2/web/"> 
    DirectoryIndex index.php 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
    Allow from 127.0.0.1 localhost 
</Directory> 
+2

使用這個,但還沒有工作 –

+0

我已經得到了解決方案,但謝謝你的無價的幫助。 +1。 –