【问题标题】:Apache Mod Rewrite For LaravelLaravel 的 Apache Mod 重写
【发布时间】:2012-09-09 01:24:19
【问题描述】:

我在 Wampserver 上安装了 Laravel。目录如下:

C:\wamp\www\laravel

现在的网址是这样的:

http://localhost/laravel/public/index.php/home/index

所以我使用了下面的htaccess代码

Options +FollowSymLinks
Options -indexes
DirectoryIndex index.PHP
RewriteEngine on
RewriteCond $1 !^(index\.PHP|images|robots.txt)
RewriteCond %{REQUEST_ FILENAME} !-f
RewriteCond %{REQUEST_ FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L, QSA]

将 URL 缩减为

http://localhost/laravel/public/home/index

但 laravel 框架坚持所有应用程序文件都驻留在公用文件夹中。

所以我想知道我需要在 htaccess 文件中添加(或减去)什么,以便 URL 看起来像

http://localhost/laravel/home/index

谢谢

【问题讨论】:

    标签: php apache laravel


    【解决方案1】:

    我在本地开发环境中进行此工作的最简单方法是执行以下操作:

    (假设您在 C:\WAMP 中安装了 WAMP)

    创建以下文件夹:

    c:\wamp\www\laravel
    

    下载laravel,将内容放到上述目录下。如果您可以浏览到 hxxp://localhost/laravel/public 并获得打开屏幕,您将知道您做对了。然而,这还不够好。我们想通过http://localhost/laravel 获得那个屏幕

    那么我们执行以下操作:

    创建一个包含以下内容的文本文件:

    Alias /laravel "c:/wamp/www/laravel/public" 
    
    <Directory "c:/wamp/www/laravel/public">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Allow from all
    </Directory>
    

    将此文件另存为laravel.conf 在c:\wamp\alias 目录中。

    最后,重启你的 wampserver。

    你现在应该可以上网到http://localhost/laravel

    请注意,以上内容仅限于本地开发环境。

    【讨论】:

    【解决方案2】:

    在本地测试时,我会做两件事之一。

    1. 使用以下内容在公共目录下创建一个新的 .htaccess。

      <IfModule mod_rewrite.c>
          RewriteEngine on
      
          RewriteRule ^(.*)$ public/$1 [L]
      </IfModule>
      
    2. 创建一个新的虚拟主机。使用 WAMP,您可以导航到 C:\wamp\bin\apache\YOUR APACHE VERSION\conf\extra 并找到您的 httpd-vhosts.conf 文件,在那里您可以看到示例虚拟主机。这是我的一个:

      <VirtualHost *:80>
          DocumentRoot "c:/wamp/www/laravel/public"
          ServerName laravel.dev
          ServerAlias www.laravel.dev
      </VirtualHost>
      

      确保包含您的 vhosts 配置文件。打开您的httpd.conf 文件并搜索vhosts 文件,如果它被注释掉,请取消注释包含行。然后我打开 CLI 并输入 notepad "C:\windows\system32\drivers\etc\hosts" 这将打开您的主机文件。在提及localhost 的项目下方放置您的新主机。这是一个例子。

      127.0.0.1  laravel.dev
      

      确保您重新启动 Apache 和宾果游戏,您应该能够导航到 http://laravel.dev,并且您不会有任何烦人的公共目录。这就是我实现它的方式,因为我更喜欢看起来更好看的虚拟主机,而不是冗长的localhost URL。

    希望这会有所帮助。

    【讨论】:

    • 我试过了,但是http://laravel.dev 只是把我带到了 wamp 的索引。我正在使用另一种方法:移动公用文件夹的内容,然后修改索引文件并更改所需路径,如下所示:require './paths.php'; 当然,我不会在部署期间这样做,但它是一种快速的开始方式
    • 折叠文件夹被证明是个坏主意。我终于想出了一个解决办法。出于某种原因,您的程序对我不起作用。
    • 我记得做了所有步骤,但它一直显示我 wamp 的索引页面。我从一个站点得到了我最终使用的方法,该指令只为您想要创建的新虚拟主机添加了虚拟主机设置。它产生了同样的问题,只是这一次,它掩盖了本地主机的虚拟主机。因此我为 www 文件夹添加了一个虚拟主机配置
    • 我现在明白为什么它不起作用了。因为Include conf/extra/httpd-vhosts.confconf/httpd.conf中默认注释,所以我对httpd-vhosts.conf文件所做的更改没有效果。
    • 你说“在下面创建一个新的.htaccess”是什么意思?在 public 文件夹中还是在 laravel 文件夹中?
    【解决方案3】:

    我终于找到了出路。首先,我必须通过从 Wamp Aestran 托盘菜单中选择它来打开和编辑我的 Apache httpd.conf。我不得不取消注释该行

    #Include conf/extra/httpd-vhosts.conf

    之后,我打开了位于

    的文件

    &lt;wampdirectory&gt;/bin/apache/apache.x.y.z/conf/extra/httpd-vhosts.conf

    然后我添加了以下几行。

    #
    # Use name-based virtual hosting.
    #
    NameVirtualHost *:80
    
    
    <VirtualHost *:80>
        DocumentRoot "C:/wamp/www"
        ServerName localhost
        Options Indexes FollowSymLinks
        <Directory "C:/wamp/www">
            AllowOverride All
            Order Deny,Allow
            Deny from all
            Allow from 127.0.0.1
            #If you want to allow access from your internal network
            # For specific ip addresses add one line per ip address
            #Allow from 192.168.0.100
            # For every ip in the subnet, just use the first 3 numbers of the subnet
            #Allow from 192.168.0
        </Directory>
    </VirtualHost>
    
    ## must be first so the the wamp menu page loads when you use just localhost as the domain name
    
    <VirtualHost *:80>
        DocumentRoot "C:/wamp/sites/laravel/public"
        ServerName laravel.dev
        Options Indexes FollowSymLinks
        <Directory "C:/wamp/sites/laravel/public">
            AllowOverride All
            Order Deny,Allow
            Deny from all
            Allow from 127.0.0.1
            #If you want to allow access from your internal network
            # For specific ip addresses add one line per ip address
            #Allow from 192.168.0.100
            # For every ip in the subnet, just use the first 3 numbers of the subnet
            #Allow from 192.168.0
        </Directory>
    </VirtualHost>
    

    下一步是在 C:\windows\system32\drivers\etc 编辑我的主机文件

    并添加了

    127.0.0.1 laravel.dev

    然后重新启动 Wamp 并且它工作。感谢你们为我指明正确的方向。真心欣赏

    【讨论】:

    • 这是我发布并推荐您使用的解决方案。虽然我确实没有提到虚拟主机不会自动包含在您的httpd.conf 中。
    • 哇...非常感谢,你真的救了我
    【解决方案4】:

    作为 WAMP 和 Laravel 的新手,我有点挣扎,但确实让虚拟主机的东西在我的 WIN7PRO 64 位机器上工作。在文件末尾的 WAMPSERVER/Apache/hppd.conf 中,我添加了:

    NameVirtualHost *:80
    
    <VirtualHost *:80>
     DocumentRoot C:/webapp/public
     ServerName webapp
     <Directory C:/webapp/public >
       Options Indexes FollowSymLinks MultiViews
       AllowOverride all
       Order Deny,Allow
       Allow from All
     </Directory> 
    </VirtualHost> 
    
    <VirtualHost *:80>
     DocumentRoot C:/wamp/www
     ServerName localhost
    </VirtualHost> 
    

    我补充说:

    127.0.0.1 网络应用

    到主机文件。 (正如网络上的许多帖子所建议的那样,我从未成功编辑过 vhosts 文件。)

    这些更改允许我在浏览器中访问我的 Laravel 测试应用程序

    http://webapp
    (and also, via just http://127.0.0.1)
    

    并且,通过以下方式访问我的所有其他网站:

    http://localhost/devsite/whatever..
    

    【讨论】:

    • 感谢您的帮助。我试过了,但一直收到“禁止错误”消息。
    【解决方案5】:

    您的代码和公用文件夹最终会位于同一个地方,这是大多数人不推荐的。我建议您利用本地网络服务器。

    为什么不让mysite.dev 指向laravel/public 目录,这样你就可以每次都使用http://mysite.dev,你的URL 也更简洁更短?

    【讨论】:

    • 谢谢,但我想这样做,即将应用程序文件严格放在公共文件夹中以用于测试和学习目的。每个新的测试项目都要进行所有配置,这很累。此外,Wampserver 的 Apache 配置全部被破坏。比如我找不到 conf.d 目录
    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多