AMP页面URL重写规则求助(PHP/.htaccess环境)
解决AMP页面URL重写的.htaccess规则问题
首先得明确你的核心需求:在现有CMS所有请求走index.php?goto的架构下,让AMP页面拥有更友好的URL格式,同时能正确路由到CMS的AMP处理逻辑。下面分两种URL格式给你对应的规则,你可以根据实际需求调整:
第一种:匹配/amp/blog.amp.php?catidx=xxx格式
如果希望保留.amp.php的后缀,同时传递catidx参数,你可以在现有.htaccess规则最前面添加以下代码:
RewriteEngine On # 处理AMP的blog.amp.php格式请求 RewriteRule ^amp/blog\.amp\.php$ index.php?goto=amp_blog_handler [QSA,L]
^amp/blog\.amp\.php$:精准匹配以/amp/blog.amp.php开头的请求(转义.是因为正则里.代表任意字符)[QSA]:自动把原请求的catidx等参数追加到新的URL里,比如/amp/blog.amp.php?catidx=how-to-fix-misshapen-teeth会被转成index.php?goto=amp_blog_handler&catidx=how-to-fix-misshapen-teeth[L]:表示这是最后一条规则,匹配后不再执行后续规则
第二种:匹配/amp/blog/topic.html伪静态格式
如果想要更简洁的伪静态URL,比如把/amp/blog/how-to-fix-misshapen-teeth.html路由到CMS处理,规则可以这么写:
RewriteEngine On # 处理AMP的伪静态blog URL RewriteRule ^amp/blog/([^/]+)\.html$ index.php?goto=amp_blog_topic&topic=$1 [QSA,L]
^amp/blog/([^/]+)\.html$:捕获/amp/blog/和.html之间的字符串(比如how-to-fix-misshapen-teeth),把它作为topic参数传递$1:对应正则里捕获的第一个分组内容,也就是上面提到的topic字符串- 同样
[QSA]会保留额外的查询参数(如果有的话)
关键注意事项
- 规则顺序很重要:一定要把AMP的规则放在现有CMS的通用路由规则前面,否则会被
index.php?goto的规则先匹配,导致AMP规则不生效 - 替换
goto参数值:上面的amp_blog_handler和amp_blog_topic是示例,你需要替换成你的CMS中实际处理AMP内容的goto参数值(比如原来处理AMP的逻辑对应的goto值) - 测试规则:可以用
curl -I命令测试,比如curl -I https://yourdomain.com/amp/blog/how-to-fix-misshapen-teeth.html,看返回的响应头是否符合预期 - 冲突排查:如果现有规则里有
RewriteCond或者其他匹配/amp/开头的规则,需要调整优先级,避免冲突
内容的提问来源于stack exchange,提问作者Mehmet Uyarovic
相关产品推荐
相关产品推荐

