1

为了寻找更用户友好的 URL,我如何仅使用 .htaccess 优雅地实现以下两个目标?

/de/somepage
/somepage?ln=de

/zh-CN/somepage#7
/somepage?ln=zh-CN#7

摘要:
/[语言]/[pagefilenameWithoutExtension][可选锚点#][0-9 之间的数字]

应该加载(不改变 url)
/[pagefilenameWithoutExtension]?ln=[language][optional anchor#][a number from 0-9]

更新,在提供解决方案之后: 1. 异常 /zh-CN/somepage 应该可以作为 /cn/somepage 访问 2. php 生成的缩略图现在不再加载,例如:
img src="imgcpu?src=someimage.jpg&w=25&h=25&c= f&f=bw"

4

2 回答 2

3
RewriteRule ^([a-z][a-z](-[A-Z][A-Z])?)/(.*) /$3?ln=$1 [L]

您不需要为片段做任何事情(例如:)#7。它们不会发送到服务器。它们完全由浏览器处理。

更新: 如果您真的想将 zh-CN 视为特例,您可以执行以下操作:

RewriteRule ^zh-CN/(.*) /$1?ln=zh-CN [L]
RewriteRule ^cn/(.*) /$1?ln=zh-CN [L]
RewriteRule ^([a-z][a-z])/(.*) /$2?ln=$1 [L]
于 2010-11-29T00:06:00.523 回答
0

我建议以下 -

RewriteEngine on
RewriteRule ^([a-z][a-z])/([a-zA-Z]+) /$2?ln=$1
RewriteRule ^([a-z][a-z])/([a-zA-Z]+#([0-9])+) /$2?ln=$1$3

第一条规则处理像 /de/somepage 这样的 URL。该语言的长度应恰好为两个字符,并且只能包含 a 到 z 个字符。

第二条规则处理像 /uk/somepage#7 这样的 URL。

于 2010-11-29T00:05:03.647 回答