用户请求以下URI:
https://example.com/page.php?s=201903071830&e=201904192359&t=sampletitle
我想使用.htaccess在浏览器中重写一个干净的URI:
https://example.com/sampletitle
并且我想将干净的URI back 映射到原始URI。
我尝试了以下.htaccess规则:
RewriteCond %{QUERY_STRING} ^s=201903071830&e=201904192359&t=sampletitle$
RewriteRule (.*) https://example.com/sampletitle? [R,L]
RewriteRule ^sampletitle\/?$ /page.php?s=201903071830&e=201904192359&t=sampletitle [L]
预计[L]
标志将停止规则处理,这是我认为会发生的情况:
RewriteCond
不匹配 ,因此首先跳过RewriteRule
。RewriteRule
匹配并重写;规则处理结束。但是,相反,我收到“ ERR_TOO_MANY_REDIRECTS”,大概是因为.htaccess卡在重写匹配循环中。
如何使用.htaccess重定向原始URI的传入请求,然后重写相同的查询字符串?
答案 0 :(得分:1)
编辑,我看到我最初发布的内容以及您要执行的操作的问题。试试看:
RewriteCond %{QUERY_STRING} ^s=201903071830&e=201904192359&t=sampletitle$
RewriteCond %{REQUEST_URI} !^\/?page.php
RewriteRule (.*) https://example.com/sampletitle? [R,L]
RewriteRule ^sampletitle\/?$ /page.php?s=201903071830&e=201904192359&t=sampletitle [L]
答案 1 :(得分:1)
保持规则不变,然后更改第二行:
RewriteCond %{QUERY_STRING} ^s=201903071830&e=201904192359&t=sampletitle$
RewriteRule !^page\.php https://example.com/sampletitle? [R,L]
RewriteRule ^sampletitle\/?$ /page.php?s=201903071830&e=201904192359&t=sampletitle [L]
发生错误是因为您与QUERY_STRING
相匹配,所以URI,原始URI和您内部重写的URI都具有相同的QUERY_STRING
但有不同的URI
,因此您应该排除在此RewriteRule !^page\.php
行中,以page.php开头的URI。