大家好,我有一个关于 mod-rewrite 的问题。当用户输入时,/somepage?ln=xx
我的服务器会以不可见的方式加载,/xx/somepage
这是一个非常漂亮的 URL。
但,那些丑陋的页面仍然会重新出现在缓存中,我只希望它们永久重定向到好的 URL。这样它们就会消失,只留下漂亮的 URL。
/somepage?ln=xx
应永久 301 重定向到/xx/somepage
,然后会以不可见的方式加载页面,而不会显示丑陋的 URL。当未设置语言时,假设为英语:
/somepage
应重定向到/en/somepage
在这两种情况下,文件扩展名都应该是可选的(例如,应该可以使用或不使用各种扩展名).php .htm .pag,换句话说,如果这些 URL 有 3 个字符的扩展名,则所有 3 个字符的扩展名也应该可以工作)。
/联系?ln=xx或者/contact.zzz?ln=xx
应该同时 /xx/联系方式
language 只有 2 个字符。我现在有:
# make language as a /lang/page like /xx/contact WORKS
RewriteRule ^([a-z][a-z])/(.*) /$2?ln=$1 [L]
# when no page, only language set, go to root /nl or /nl/ WORKS
RewriteRule ^([a-z][a-z])/?$ /$1/home [R=301,L]
# permanently redirect ugly urls to nice ones, so the ugly ones dissappear
RewriteRule ???
答案1
所以您要将不好看的 URL 重定向到好看的 URL,然后再将其重写回来?
我认为这里的技巧是使用 RedirectMatch 而不是 RewriteRule(检查您是否已加载模块):
RedirectMatch 301 /(.*)?ln=([a-z][a-z]) http://example.com/$2/$1
但是,我真的不知道当您实质上创建一个循环时,这样做的效果会如何。它应该可以工作,因为该Redirect
部分指示浏览器请求“好的”URL,但服务器随后会悄悄地将Rewriting
其返回到“丑陋的”URL 进行处理。
关键在于,如果重写的 URL 再次通过重定向进行处理,您的服务器可能会崩溃成一个微型黑洞。我不确定。
(为清晰起见,已编辑。)