Yii2:-Pretty URL 已经形成,但没有工作(说 404 NOT FOUND)
Yii2:-Pretty URL's are formed, but not working (says 404 NOT FOUND)
我已经开始学习 yii2 并且我尝试做漂亮的 URL 东西,但是失败了。我做了什么:-
in config/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 -->
现在:
当我通过以下方式访问我的页面时:
它打开了,当我将鼠标悬停在页面的任何 link 上时,它向我显示了这样的内容:http://localhost/yii2/web/site/about(显示漂亮的 URL 的女仆)
但是这些 URL 不起作用(说找到 404 个)
我也试过下面的帖子代码,但对我没有用:
How to access a controller with pretty url in Yii2
Enable clean URL in Yii2
为什么不直接在 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>
终于成功了:-
1. 创建了两个 .htaccess 文件(一个在根目录下,一个在我的应用程序的 Web 文件夹中) :-
root .htaccess:-
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/.*
RewriteRule ^(.*)$ web/ [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
如果以上答案均无效,并且您在 linux 上使用 Apache 作为 Web 服务器,请确保在 Apache 中启用了重写模式,如果未启用,您可以使用以下命令启用它:
sudo a2enmod rewrite
然后重启 Apache 网络服务器
sudo systemctl restart apache2
应该可以解决问题。
我已经开始学习 yii2 并且我尝试做漂亮的 URL 东西,但是失败了。我做了什么:-
in config/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 -->
现在:
当我通过以下方式访问我的页面时:
它打开了,当我将鼠标悬停在页面的任何 link 上时,它向我显示了这样的内容:http://localhost/yii2/web/site/about(显示漂亮的 URL 的女仆)
但是这些 URL 不起作用(说找到 404 个)
我也试过下面的帖子代码,但对我没有用:
How to access a controller with pretty url in Yii2
Enable clean URL in Yii2
为什么不直接在 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>
终于成功了:-
1. 创建了两个 .htaccess 文件(一个在根目录下,一个在我的应用程序的 Web 文件夹中) :-
root .htaccess:-
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/.*
RewriteRule ^(.*)$ web/ [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
如果以上答案均无效,并且您在 linux 上使用 Apache 作为 Web 服务器,请确保在 Apache 中启用了重写模式,如果未启用,您可以使用以下命令启用它:
sudo a2enmod rewrite
然后重启 Apache 网络服务器
sudo systemctl restart apache2
应该可以解决问题。