没有index.php路由无法工作

pbpqsu0x  于 2023-04-04  发布在  PHP
关注(0)|答案(9)|浏览(113)

我用的是laravel 4。
我有一个视图nest.blade.php和相应的控制器NestController.php:
控制器内容:

class NestController extends BaseController {

    public function showView()
    {
        return View::make('nest');
    }

}

途径:

Route::get('/nest', 'NestController@showView');

当我转到url/nest时,它不起作用。当我转到url/index.php/nest时,它起作用。
显然,我只是希望它是/nest,而没有index.php。
我该如何解决这个问题?
我的htaccess:

IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
dced5bon

dced5bon1#

漂亮URL

该框架附带了一个public/.htaccess文件,用于允许没有index.php的URL。如果您使用Apache为您的Laravel应用程序提供服务,请确保启用mod_rewrite模块
如果Laravel附带的.htaccess文件在Apache安装中不起作用,请尝试以下操作:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

有关更多相关帮助,请查看this answer

mrphzbgm

mrphzbgm2#

我在Apache HTTP服务器中启用了mod_rewrite模块,重新启动Apache服务并再次测试,它工作了!!!
下面是我用来启用mode_rewrite的代码;
1)在Apache/conf/httpd.conf中取消这一行的散列
加载模块重写_模块modules/mod_重写. so
2)为“sample-project”创建一个新配置,而不修改httpd.conf文件中的默认配置

Directory "C:/Apache24/htdocs/sample-project">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
Directory>
hjqgdpho

hjqgdpho3#

注意!如果在启用重写模块后它仍然不工作。你需要在httpd. conf中将“AllowOverride None”改为“AllowOverride All”。
正如@The Alpha提醒的那样,Laravel不需要为此目的进行配置。

piwo6bdm

piwo6bdm4#

当你在httpd.conf中将AllowOverride None改为AllowOverride All时,请确保你在包含有效路径的<directory ...>中进行了更改。
示例

<Directory "/var/www/html"> #check path
   Options Indexes FollowSymLinks
   AllowOverride All
</Directory>
50few1ms

50few1ms5#

**由于某些原因,上面的答案对我不起作用,所以这是唯一对我起作用的答案。
我使用ubuntu 18.04 amd64作为开发服务器环境,因此修改了apache.conf文件,位于/etc/apache2
从:

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

到:

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

还从:

<Directory /usr/share> AllowOverride None Require all granted

<Directory /usr/share> AllowOverride All Require all granted

之后,您需要在终端中使用sudo service apapche2 restart命令重新启动apache
现在,我可以在URL中不使用index.php访问页面
功劳归于:joshymatheww@Laracasts servers discussion channel on Aug 5, 2017

wpx232ag

wpx232ag6#

登录终端

sudo nano /etc/apache2/apache2.conf

后线

<Directory /var/www/>
.
.
.
</Directory>

并粘贴以下代码

<Directory /var/www/html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
</Directory>

Ctrl+O,然后Ctrl+M,然后Ctrl+x
现在重启apache服务器

sudo service apache2 restart
r1zhe5dt

r1zhe5dt7#

首先,你需要在/etc/apache2/apache2.conf中设置AllowOverride All。找到以下块:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        DirectoryIndex index.php
        Require all granted
</Directory>

然后你需要修改/etc/apache2/mods-available/dir.conf并移动index.php:

<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

↓ ↓↓↓这是很多人都忽略的重要部分↓ ↓↓↓
请勿忘记运行a2enmode

sudo a2enmod rewrite

然后

sudo service apache2 restart

这样你就可以将它应用到你所有的laravel项目中(在/var/www/文件夹中)。

wpx232ag

wpx232ag8#

在你的.htaccess中设置这个

DirectoryIndex index.php

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

RewriteRule .? %{ENV:BASE}/index.php [L]
hm2xizp9

hm2xizp99#

试试下面的. htaccess。我在服务器或本地主机环境中从来没有遇到过任何问题。
目录索引. php

<IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>

        RewriteEngine On

        RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
        RewriteRule ^(.*) - [E=BASE:%1]

        RewriteCond %{ENV:REDIRECT_STATUS} ^$
        RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule .? - [L]

        RewriteRule .? %{ENV:BASE}/index.php [L]

    </IfModule>

相关问题