Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 4 htaccess重定向循环_Php_.htaccess_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel 4 htaccess重定向循环

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 ^

我有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
,就会出现重定向循环错误。对于服务器上的任何子文件夹,我都会遇到此错误

您应该能够简单地更改重写规则以包含子文件夹:

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。