Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel和htaccess重定向Url问题_Php_Laravel_.htaccess_Redirect_Url Rewriting - Fatal编程技术网

Php 使用Laravel和htaccess重定向Url问题

Php 使用Laravel和htaccess重定向Url问题,php,laravel,.htaccess,redirect,url-rewriting,Php,Laravel,.htaccess,Redirect,Url Rewriting,我在本地xampp中为我的项目创建虚拟主机。Url: 我在公用文件夹(Laravel)中有文件夹名admin(见下图) 在我的项目中,我的管理员登录urlhttp://localhost/admin/login 我点击了urlhttp://localhost/admin/login转到管理员登录页面。。没关系。。 但是当我点击这个http://localhost/admin。它将我带到public/admin文件夹。这意味着显示公共目录列表 为了防止访问目录列表或public/admin,我

我在本地xampp中为我的项目创建虚拟主机。Url:

我在公用文件夹(Laravel)中有文件夹名admin(见下图)

在我的项目中,我的管理员登录url
http://localhost/admin/login

我点击了url
http://localhost/admin/login
转到管理员登录页面。。没关系。。 但是当我点击这个
http://localhost/admin
。它将我带到public/admin文件夹。这意味着显示公共目录列表

为了防止访问目录列表或public/admin,我在.htaccess文件中写入了
Options-index
code。一般来说,这是403错误(禁止访问!)。这是工作

当我点击url
http://localhost/admin
它将带我去
http://localhost/admin/login

注意:

  • 我没有更改文件夹结构。(存在Laravel默认文件夹结构)
  • 我在.htacees文件中只写了一行代码:
    Options-index
    。这通常会给我403个错误(禁止访问!)
  • 版本“laravel/framework”:“5.8.*”
  • 我用web.php编写,但它不起作用

    Route::get('/admin', function () {
      return redirect('/admin/login');
    });
    

    如果需要更多解释,请评论。

    要修改.htaccess,您需要在.htaccess中添加类似的内容。这将把所有请求从/admin重定向到/public,但仍然显示为/admin,这将允许您在
    web.php
    中重定向:-

    RewriteRule admin /public [L] 
    
    这将给你:-

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
        
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Send Requests To Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule admin /public [L] 
        RewriteRule ^ index.php [L]
    
        
    </IfModule>
    
    
    选项-多视图-索引
    重新启动发动机
    #句柄授权头
    RewriteCond%{HTTP:Authorization}。
    重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
    #如果不是文件夹,则重定向尾部斜杠。。。
    重写cond%{REQUEST_FILENAME}-D
    重写cond%{REQUEST_URI}(+)/$
    重写规则^1[L,R=301]
    #向前端控制器发送请求。。。
    重写cond%{REQUEST_FILENAME}-D
    重写cond%{REQUEST_FILENAME}-F
    重写规则管理员/公共[L]
    重写规则^index.php[L]
    

    不过,我仍然觉得这是一种不好的做法,将目录结构更改为@flakerimi sugested将是一个更好的解决方案。

    默认路由设置是忽略与公共资源文件夹下现有文件或文件夹匹配的任何请求,因此此请求首先不会进入Laravel。您需要相应地修改main.htaccess中的URL重写,以便将此请求移交给Laravel,尽管它与实际存在的文件夹相匹配。从Public删除管理员文件夹管理员文件夹中有什么?你想干什么?如果你指向一个AdminController@index处理请求的方法。正如CBroe在上面所说的,由于您的文件结构,路由正在忽略请求,这就是@flakerimi建议移动您的管理目录的原因。您的管理目录中有什么?您是否仍然需要普通身份验证,还是仅针对管理员?我们需要更多地了解您的代码,更好地理解您试图实现的目标。是的,您可以通过编辑.htaccess来实现这一点,但根据您的要求,还有其他方法。@AbdullahAlNoor您必须更改文件夹结构,因为laravel的公用目录中没有管理员目录。为了让我们能够帮助您,您必须倾听并回答所提出的问题。请在您的答案中添加所有解释,而不是链接到外部链接ressources@Nico,这里有很多要解释的。。为什么要复制已发布网站上的内容?不允许我参考外部网站吗?不,不允许链接到外部页面。它们可能会更改或被完全删除,这会使您的答案变得毫无价值。虽然此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-@克里斯,请复习我的问题。。如果有什么不清楚的话。。请评论。。。