0

我有 Laravel 4 应用程序和一些子文件夹应用程序。Laravel 4 应用程序位于根文件夹中,其中有一个.htaccess文件,内容如下:

Options -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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

现在,如果我去www.mysite.com/subfolder-app我得到重定向循环错误。对于服务器上的任何子文件夹,我都会收到此错误

4

2 回答 2

0

您应该能够简单地更改 RewriteRule 以包含子文件夹:

Options -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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

但是请注意,这不会随着您的环境“动态地”改变。如果你的 localhost 在 webroot 而不是子文件夹中使用 Laravel 运行,那么对你的 htaccess 文件进行此更改可能会使其不再在你的 localhost 开发环境中工作。

对此的一种解决方案是不使用 .htaccess 文件,而是在您的域的虚拟主机配置文件中包含重写规则。这样做的能力将取决于您的托管。

该解决方案还具有从我们的应用程序代码存储库中删除服务器配置(而不是应用程序配置)的好处

编辑

这是 OP 使用的最终分辨率,因为它不完全符合我的建议:

Options -MultiViews 

RewriteEngine On 

# Rewrite to "www" version
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

# Add -d check to ensure only rewrite if url 
# is not an existing directory
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^ index.php [L]
于 2013-08-26T16:23:59.203 回答
0

所以我有一个类似的问题,我的公共 laravel 项目文件中有子文件夹。当我向 xyz.com/sub-directory 发出请求时,它会创建一个重定向循环。我解决这个问题的方法是在斜杠之前添加以下内容:

RewriteRule ^sub-directory/([a-zA-Z0-9-_]*/)*?$ / [L,R=301]

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

laravel github 页面中提到的解决方案之一是删除尾部斜杠,但这会将您的子目录暴露给默认的 apache 目录查看器,您可能真的不希望这样。此方法对我有用,因为它将重定向规则添加到子目录的基本路径以及递归中的任何目录(只要它们由字母数字、- 或 _ 符号定义)。

于 2014-12-08T03:33:29.877 回答