我的文件中有以下内容.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 文件的公共文件夹)位于项目文件夹内。