在 .htaccess 中使用正则表达式来定义转向

任务一:

Apache 提供一个 .htaccess 文件,它可用来进行 URL 转向。例如您想将 http://dallascao.com/cn/ 转到 http://dallascao.com/en/,您可以打开根目录下的 .htaccess 文件,然后输入以下代码:
(建设中…)

RewriteRule ^cn\/?$ en\/

简单说,这句话的意思是“把 ‘^cn\/?$’ 使用 ‘en/’ 代替”。 “^cn\/?$” 就是一个简单的正则表达式:

“^” 匹配字符串的开头
“$” 茶杯字符串结尾
“\” 的意思是它后面的符号”/”代表符号本身,而不是语法符号。
“?” 意思是可以有一个 “/” 或没有 “/”

也就是说 “^cn\/?$” 匹配两个字符串,”cn/” 或 “cn”。访客访问 http://dallascao.com/cn/ 或 http://dallascao.com/cn 时,他们被转向至 http://dallascao.com/en/

任务二:

如果您将将 http://dallascao.com/ 转向至 http://dallascao.com/en/,可以使用以下代码:


RewriteRule ^$ en\/

“^$” 匹配一个空字符串,即网站根目录。

任务三:

把以代码放到 http://gt4t.net/ 根目录,访问 http://gt4t.net/任何字符串/ 的人就会被自动转向至 http://gt4t.net/en/任何字符串/. 例如,访问 http://gt4t.net/downloads/,即被转向至 http://gt4t.net/en/downloads.

RewriteRule ^(.*?)\/?$ \/en\/$1

“^(.*?)\/?$” 代表任何以 “/” 或 no “/” 的字符串。表达式的第二部分 “\/en\/$1″, “$1″ 代表了 “^(.*?)\/?$” 第一个括号中的内容。即以 “/”结束 或没 “/” 的”任何字符串”被成了 “/en/任何字符串/”

此外,如果您想实现隐藏式转向,您可以在开头加入下面这个选项:

Options +FollowSymLinks

下面就是一个完整的 .htaccess 文件:

RewriteEngine on
Options +FollowSymLinks
 
RewriteCond %{HTTP_HOST} ^gt4t.net$ [OR]
RewriteCond %{HTTP_HOST} ^www.gt4t.net$
RewriteRule ^(.*?)\/?$ \/gt4t_en\/$1 [L]

看不懂? 需要帮忙的就联系我吧。

One thought on “在 .htaccess 中使用正则表达式来定义转向

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">