.htaccess 拉拉拉威尔网站

q5iwbnjs  于 2023-01-05  发布在  其他
关注(0)|答案(8)|浏览(153)

我在本地安装了一个新的Laravel。看起来htaccess或Apache设置有问题。我研究了几个小时,尝试了我读到的所有东西。

  • OSX狮子10.7.5
  • 质量管理计划3.0.5
  • PHP语言5.5.10
  • mod_rewrite正在加载。

我的开发服务器与其他网站一起工作。这是我第一次尝试Laravel 4。
I get a 403 Forbidden on the welcome page which is located at website.dev:8888/
Apache给我这个错误:目录索引被Options指令禁止
下面是我的. 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>

以下是我采取的一些额外措施:

  • AllowOverride在httpd.conf中设置为"全部
  • 在httpd-vhosts. conf中添加了虚拟主机代码部分
  • verified that the hosts file contains a line for the site 127.0.0.1 website.dev

I've also tried various lines in the htaccess which I found in articles and I also restarted apache each time I made changes to the conf files. No routes work. When I go to website.dev:8888/public I get a blank page, no error. If I go to a route I created such as website.dev:8888/users I get a 404 not found error.
谢谢你的帮助!

wkyowqbh

wkyowqbh1#

这个解决方案工作得很好,对我来说是最好的解决方案。将此代码粘贴到根目录htaccess中。就这样。保持所有其他文件不变

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

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
u91tlkcl

u91tlkcl2#

在根路径中创建一个.htaccess文件

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/public/ 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


RewriteRule ^(.*)$ /public/$1 
#RewriteRule ^ index.php [L]
RewriteRule ^(/)?$ public/index.php [L] 
</IfModule>

在公共目录中创建.htaccess文件

<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]

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

如果你在public/index.php文件中做了任何更改,请用正确的路径进行更正,然后你的站点将是活的。
这个能解决什么问题?

  • laravel项目的托管问题。
  • Css对laravel不起作用。
  • Laravel网站无法工作。
  • 使用domain/public/index.php加载您的网站
  • laravel项目不能正确重定向
js5cn81o

js5cn81o3#

答案

以下是我发现的有效方法:删除/public目录中的.htaccess文件,然后将以下内容放入laravel安装的文档根目录中。

澄清

因此,如果您的laravel应用程序安装在/public_html/laravel,您将查看/public_html/laravel/public并删除其中的.htaccess文件,然后在/public_html/laravel目录中创建一个名为.htaccess的新文件

将下面的代码复制到文档根目录下的新. htaccess文件中

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

    RewriteEngine On

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

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

请注意

正如Concordus Applications在他们的回答中提到的,确保Loadmodule mod_rewrite没有注解(确保在apache配置文件中它后面没有#符号)
Concordus Applications还指出,应该将AllowOverride设置为适当的设置。他们给出的示例如下。

<Directory "/some/absolute/path/htdocs">
    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all
</Directory>

如果您对apache配置文件做了任何更改,请确保重新启动apache服务器。

nmpmafwu

nmpmafwu4#

公认的答案工作,但没有与拉瑞维尔护照认证。
有必要添加一些标题调整:

RewriteEngine On

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
mrwjdhj3

mrwjdhj35#

该框架附带了一个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]
5q4ezhmt

5q4ezhmt6#

确保/wwwroot和/public中都有.htaccess文件,但内容不同:wwwroot/.htaccess网址:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/ 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 
#RewriteRule ^ index.php [L]
RewriteRule ^(/)?$ public/index.php [L] 
</IfModule>

wwwroot/公共/.htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
    RewriteEngine On    
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
hm2xizp9

hm2xizp97#

此.htaccess将从您的URL中删除/public/并强制使用https://
把这个.htaccess放在你的根文件夹中,不要把server.php文件重命名为index.php,这个.htaccess就可以完成所有的事情

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

    RewriteEngine On
    RewriteCond %{HTTPS} !=on    
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteRule ^(.*)$ public/$1 [L]

    # 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 ^ index.php [L] 

</IfModule>
bejyjqdl

bejyjqdl8#

简单的解决方案复制并粘贴下面的代码到您的.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^-$public/index.php[L]
RewriteRule ^((?!public/).*)$ public/$1 [L]
</IfModule>

相关问题