如何用.htaccess规则将public设为共享服务器的站点根目录
解决共享服务器将public设为文档根的.htaccess配置问题
你的问题出在原.htaccess规则只处理了首页请求,其他路径没有被转发到public/index.php,导致Apache直接在项目根目录下查找对应文件,自然返回404。
替换项目根目录下的.htaccess为以下规则:
RewriteEngine On # 排除实际存在的文件/目录(比如public里的静态资源) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 避免循环重写,排除已指向public的请求 RewriteCond %{REQUEST_URI} !^/public/ # 将所有请求转发到public/index.php,保留原始URI供路由处理 RewriteRule ^(.*)$ /public/index.php [L]
规则说明:
RewriteEngine On:开启URL重写模块- 前两个
RewriteCond:如果请求的是实际存在的文件或目录(比如未来你在public里添加的css、js等静态资源),直接返回该资源,不触发重写 RewriteCond %{REQUEST_URI} !^/public/:避免对public目录本身的请求进行重写,防止出现循环重写问题RewriteRule ^(.*)$ /public/index.php [L]:把所有符合条件的请求转发到public/index.php,[L]表示这是最后一条规则,停止后续匹配逻辑
配置完成后,所有请求都会经过你的PHP路由系统处理,和本地php -S localhost:8888 -t public的运行效果完全一致,点击/about、/notes等链接时,路由会正确匹配对应的控制器文件。
内容的提问来源于stack exchange,提问作者Fishbite
相关产品推荐
相关产品推荐

