我有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
,我会收到重定向循环错误。我在服务器上的任何子文件夹上都会收到此错误
答案 0 :(得分: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文件,而是使用include the rewrite rule in the virtual host configuration file作为您的域。这样做的能力取决于您的托管。
该解决方案还具有从应用程序代码库中删除服务器配置(而不是应用程序配置)的好处
修改强>
这是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]
答案 1 :(得分: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目录查看器,你可能真的不想要它。这个方法对我有用,因为它将重定向规则添加到子目录的基本路径和递归中的任何目录(只要它们由字母数字, - 或_符号定义)。