重定向到我的 Laravel 项目文件夹

重定向到我的 Laravel 项目文件夹

我的文件中有以下内容.htaccess。我期望它重定向到/hc与 同级的项目文件夹.htaccess。重定向没有发生,它仍然显示 的内容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]

答案1

我希望它重定向到我的项目文件/hc.htaccess

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

您的.htaccess文件需要放在父目录中。即文档根目录。(顺便说一句,RewriteBase /hc/只有当此文件位于文档根目录中时,您才需要该指令。)

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

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

请注意,由于 mod_rewrite 默认不被继承,一旦请求被重写到子目录/hc.htaccess子目录中的文件就会被处理并覆盖父.htaccess文件中的 mod_rewrite 指令,因此您不会陷入重写循环。


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

更新:你的代换最后一个指令中的字符串RewriteRule与之前的指令不同。两者可能都不正确。您可能希望删除?上述指令中的,除非您打算使用查询字符串,否则您应该在之前的指令中添加?。目前,第一个指令使用路径信息传递 URL,第二个使用请求参数

顺便说一句,该PT标志在每个目录.htaccess文件中都是多余的。如果您不使用查询字符串,那么QSA也可以删除该标志。

答案2

您需要在“sites-available”apache 配置文件中启用“rewrite”选项。对于 laravel,您应该小心,因为您的 DocumentRoot(需要 .htaccess 文件的公共文件夹)位于项目文件夹内。

相关内容