通过 mod-rewrite 进行重定向,仅使用 apache htaccess

通过 mod-rewrite 进行重定向,仅使用 apache htaccess

大家好,我有一个关于 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 再次通过重定向进行处理,您的服务器可能会崩溃成一个微型黑洞。我不确定。

(为清晰起见,已编辑。)

相关内容