You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用.htaccess隐藏URL中项目名称后内容的配置及部署适配问题

使用.htaccess隐藏URL中项目名称后内容的配置及部署适配问题

看起来你是想把本地环境里带项目名称的URL(比如http://localhost/myproject-name/admin/home/)简化成不带项目名的形式(比如http://localhost/admin/home/),同时还要考虑部署到线上主机后的适配,我来一步步帮你调整配置:

一、本地环境(localhost)的配置调整

首先要注意:把你的.htaccess文件放在网站根目录(比如XAMPP的htdocs目录,而不是myproject-name子目录里),然后替换成下面的规则:

DirectorySlash Off
RewriteEngine On

# 第一步:把带项目名的URL重定向到不带的版本(避免重复内容)
RewriteCond %{THE_REQUEST} /myproject-name/([^\s?]+) [NC]
RewriteRule ^ /%1 [L,R=301,NE]

# 第二步:内部转发不带前缀的请求到实际项目子目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /myproject-name/$1 [L]

这样设置后:

  • 当你访问http://localhost/myproject-name/admin/home/时,会自动跳转到http://localhost/admin/home/
  • 服务器内部会实际去myproject-name子目录下找对应的内容,完全不影响功能

二、部署到线上主机后的适配

线上主机的配置要根据你的项目部署位置来调整:

情况1:项目部署在主机根目录(比如public_html

如果你的项目直接放在主机的网站根目录,那不需要再处理子目录的转发了,修改.htaccess为:

DirectorySlash Off
RewriteEngine On

# 跳过真实存在的文件和目录,转发到项目入口文件(比如index.php,根据你的框架/项目调整)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

情况2:项目仍然部署在主机的子目录下

如果线上主机里你的项目还是放在子目录(比如public_html/myproject-name),那和本地环境的配置逻辑一样,只需要把规则里的/myproject-name/换成线上的子目录名称,同时把.htaccess放在主机的根目录(public_html)即可。

几个重要的注意事项

  • 确保你的本地服务器(XAMPP/WAMP)和线上主机都开启了mod_rewrite模块,否则规则不会生效
  • 测试阶段可以把R=301改成R=302(临时重定向),确认配置没问题后再换成301(永久重定向),避免浏览器缓存错误的重定向规则
  • 如果你的项目是基于特定框架(比如Laravel、CodeIgniter),最后一条转发规则要对应框架的入口文件,比如Laravel是转发到index.php

备注:内容来源于stack exchange,提问作者salim galad

火山引擎 最新活动