Ana*_*Die 6 php apache .htaccess pretty-urls yii2
我已经开始学习yii2了,我试着做漂亮的URL东西,但失败了.我做了什么:-
在config/web.php中(我在下面编辑过):
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Hide index.php
'showScriptName' => false,
// Use pretty URLs
'enablePrettyUrl' => true,
'rules' => [
],
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个.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
Run Code Online (Sandbox Code Playgroud)
我也打开了apache2.conf文件,并改变如下:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All <! -- instead of none -->
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)
我还通过命令检查了更改:
grep -R AllowOverride /etc/apache2
Run Code Online (Sandbox Code Playgroud)
它显示如下:
/etc/apache2/apache2.conf: AllowOverride All <!-- It is showing that done -->
Run Code Online (Sandbox Code Playgroud)
现在:
当我访问我的页面时:
它是打开的,当我在"关于"链接时,它显示我:http:// localhost/yii2/web/site/about (显示漂亮的网址女佣)
但这个网址不起作用(404说)
我在下面的帖子中尝试了每个代码:
Ana*_*Die 14
最后我让它工作: -
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>
Run Code Online (Sandbox Code Playgroud)
web文件夹.htaccess: -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Run Code Online (Sandbox Code Playgroud)
2.在config/web.php中: -
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
// Your rules here
],
],
Run Code Online (Sandbox Code Playgroud)
3.改成(apache2.conf)如下: -
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)
4.然后运行以下命令: -
一个. (停止apache)sudo /etc/init.d/apache2 stop
湾 (杀死进程并检查没有进程正在运行)sudo killall apache2
C. (检查端口80现在没有使用)sudo netstat -l|grep www
d. (重启apache)sudo /etc/init.d/apache2 restart
现在一切正常.
顺便说一下,感谢每一个试图帮助我的人.
参考: -
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
为什么不在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>',
),
],
Run Code Online (Sandbox Code Playgroud)
我在这里设置的规则只是一个例子,您可以按照您希望网址的样子设置它.
编辑: 如果它仍然无法正常工作,请尝试设置虚拟主机,而不是:
<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>
Run Code Online (Sandbox Code Playgroud)