我已经开始学习yii2了,我尝试做了漂亮的URL内容,但都失败了。我做了什么: -
config / web.php中的(我已在下面编辑过):
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Hide index.php
'showScriptName' => false,
// Use pretty URLs
'enablePrettyUrl' => true,
'rules' => [
],
然后我创建了一个.htaccess
文件并将其放在root上(它有以下代码):
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/site/about(显示了漂亮的网址&#39; s女佣)
但这些网址不起作用(404发现)
我也试过下面的帖子代码,但对我没用:
答案 0 :(得分:12)
最后我让它发挥作用: -
<强> 1。创建了两个.htaccess文件(一个在root上,一个在我的应用程序的web文件夹中): -
root .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>
网络文件夹.htaccess: -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
2.在config / 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
(停止apache)
b。 sudo killall apache2
(杀死进程并检查没有进程正在运行)
c。 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
答案 1 :(得分:6)
为什么不在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>',
),
],
我在此处设置的规则只是一个示例,您可以按照您希望网址的样子设置它。
修改强> 如果它仍然无法正常工作,请尝试使用以下命令设置虚拟主机:
<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 :(得分:1)
如果以上方法均无效,并且您将Apache用作Linux上的Web服务器,则请确保在Apache中启用了重写模式;如果不是,则可以使用以下命令启用重写模式:
sudo a2enmod rewrite
然后重启Apache Web服务器
sudo systemctl restart apache2
它应该可以解决问题。