redirect到我的Laravel项目文件夹

我在.htaccess文件中有以下内容。 我希望它redirect到我的项目文件夹/hc是在.htaccess相同的水平。 redirect没有发生,它仍然显示index.html的内容。

 RewriteEngine On RewriteBase /hc/ <Files .*> Order Deny,Allow Deny From All </Files> RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php?/$0 [PT,L,QSA] 

你需要在你的“站点可用的”apacheconfiguration文件中“重写”选项。 对于laravel,你应该小心,因为你的DocumentRoot(你需要.htaccess文件的公共文件夹)在项目文件夹内。

我希望它redirect到我的项目文件夹/hc.htaccess相同的水平

那就是问题所在。 如果.htaccess文件位于/hc子目录中,那么除非您已经在请求中包含/hc子目录,否则永远不会看到请求。

你的.htaccess文件需要进入父目录。 即。 文档根。 (顺便说一下,如果此文件位于文档根目录下,则只需要RewriteBase /hc/指令。)

或者,在文档根目录中添加一个额外的 .htaccess文件,只需将所有请求转发到/hc目录(前端控制器),例如:

 RewriteEngine On RewriteRule (.*) hc/$1 [L] 

请注意,由于默认情况下mod_rewrite没有被inheritance,所以一旦请求被重写到/hc子目录,子目录中的.htaccess文件就会被处理并覆盖父.htaccess文件中的mod_rewrite指令,所以你不会最终用重写循环。


 RewriteRule .* index.php?/$0 [PT,L,QSA] 

更新:最后一个RewriteRule中的replacestring与前面的指令不同。 两者可能都不正确。 你可能想要删除? 在上面的指令中,除非你打算给我们查询string,那么你应该添加一个? 到较早的指令。 现在,第一个使用path信息来传递URL,第二个使用查询string

顺便说一下,每个目录.htaccess文件中的PT标志是多余的。 如果您不使用查询string,那么QSA标志也可以被删除。