Php Laravel 4 htaccess重定向循环
我有Laravel 4应用程序和一些子文件夹应用程序。 Laravel 4应用程序位于根文件夹中,其中有一个Php Laravel 4 htaccess重定向循环,php,.htaccess,laravel,laravel-4,Php,.htaccess,Laravel,Laravel 4,我有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 ^
.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
,就会出现重定向循环错误。对于服务器上的任何子文件夹,我都会遇到此错误您应该能够简单地更改重写规则以包含子文件夹:
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 dev环境中不再工作
一种解决方案是不使用.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]
所以我遇到了一个类似的问题,在我的公共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目录查看器,您可能真的不希望这样做。这个方法对我很有用,因为它递归地将重定向规则添加到子目录和其中任何目录的基本路径中(只要它们是由字母数字或u符号定义的)。通过添加
RewriteCond%{REQUEST\u FILENAME}修复了它-d
在-f
lineGreat之后,在运行重写规则之前检查以确保其不是目录。你能为其他人添加你的最终解决方案吗?如果你愿意,我可以用它来编辑我的答案。这里是Options-multiviewsrewriteengine On RewriteCond%{HTTP_HOST}^www\。重写规则^(.*)$http://www.%{HTTP_HOST}/$1[R=301,L]RewriteCond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^index.php[L]
它还会重定向到www。