如何通过.htaccess实现product/1替代product.php?id=1的URL重写
搞定URL重写:把/product/1指向/product.php?id=1的方法
别担心,我会用最直白的步骤教你,完全不用怕自己对.htaccess一窍不通!
第一步:确认前提
首先你得确保你的网站用的是Apache服务器(因为.htaccess是Apache特有的配置文件),而且主机服务商已经开启了mod_rewrite模块——现在绝大多数主流主机都默认开启这个了,要是不确定可以问问你的主机客服。
第二步:创建/编辑.htaccess文件
- 在你的网站根目录(就是放
product.php的那个文件夹)里,创建一个名为.htaccess的文件(注意文件名开头有个点,Windows系统创建的时候可能会提示“必须输入文件名”,你可以先新建文本文件,然后重命名为.htaccess,删除.txt后缀)。 - 把下面这段代码复制粘贴进去:
# 开启URL重写引擎 RewriteEngine On # 确保只对不存在的文件/目录进行重写(避免影响真实存在的文件) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 核心重写规则:把/product/数字 转发到/product.php?id=数字 RewriteRule ^product/(\d+)$ product.php?id=$1 [L]
第三步:逐行解释(帮你理解为啥这么写)
RewriteEngine On:打开URL重写的开关,没有这一行后面的规则都没用。- 那两行
RewriteCond:意思是如果请求的不是真实存在的文件(!-f),也不是真实存在的目录(!-d),才执行后面的重写规则。比如如果你的网站真有个叫product的文件夹,这条规则就不会去动它,避免冲突。 RewriteRule ^product/(\d+)$ product.php?id=$1 [L]:^product/(\d+)$:这是匹配规则,^表示URL开头,$表示URL结尾,(\d+)表示匹配一个或多个数字(正好对应你的id参数)。product.php?id=$1:这是替换后的目标地址,$1就是刚才捕获到的那个数字,比如你访问/product/123,就会自动转发到/product.php?id=123。[L]:表示这是最后一条规则,只要匹配上就停止后续的重写处理,避免不必要的冲突。
额外小提示
如果你的id参数不仅有数字,还可能包含字母、下划线或者横杠,可以把规则里的(\d+)改成([a-zA-Z0-9_-]+),这样就能匹配更多字符了。
最后保存好文件,然后访问/product/1试试,应该就能看到和/product.php?id=1完全一样的内容啦!
内容的提问来源于stack exchange,提问作者Aaron Jonk
相关产品推荐
相关产品推荐

