Laravel共享主机部署:移除域名后的/public路径问题求助
解决Hostinger共享主机上Laravel根目录重定向到/public的问题
方法一:优化根目录的.htaccess规则
替换public_html目录下的.htaccess内容为以下规则,避免不必要的目录重定向:
<IfModule mod_rewrite.c> RewriteEngine On # 仅当请求的不是实际存在的文件或目录时,转发到public目录 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/$1 [L] # 单独处理根目录请求,直接指向public/index.php RewriteRule ^$ public/index.php [L] </IfModule>
原规则会无条件将所有请求转发到public目录,当访问根目录时,服务器会识别到public是实际存在的目录,从而触发自动重定向到/public/。新增的条件判断会跳过对实际文件/目录的转发,同时根目录请求直接指向入口文件,避免重定向。
方法二:修正Laravel的.env配置
确保项目根目录下的.env文件中,APP_URL配置为你的域名,不要包含/public:
APP_URL=https://www.domain.com
错误的APP_URL配置可能导致Laravel生成的链接或内部重定向带上/public路径,进而触发浏览器重定向。
方法三:检查public目录的.htaccess
确认public目录下的.htaccess为Laravel默认配置,不要添加额外的重定向规则:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
如果该文件有自定义的重定向规则,可能会和根目录的规则冲突,导致/public路径暴露。
内容的提问来源于stack exchange,提问作者momo
相关产品推荐
相关产品推荐

