基于URL重定向

时间:2012-05-28 18:21:38

标签: html .htaccess redirect

我不确定基于URL重定向的最有效方法。我已经看到了接近我需要的htaccess的例子,但我根本不理解它背后的编程。这就是我需要发生的事情:

  1. 检查页面是否为“watch.html”。
  2. 如果网址显示为“watch?blahblah”而不是“watch.html?blahblah”,则重定向。
    • 基本上,如果网址没有.html
  3. 重定向到添加了.html的同一页面。
  4. 感谢编写此代码的任何帮助。

1 个答案:

答案 0 :(得分:3)

不,我认为这完全没问题。 mod_rewrite模块有一个相当模糊的语法,它可能非常令人沮丧。

你想要的东西可以像这样写:

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.html$
RewriteRule (.*) $1.html

首先我们打开重写引擎。然后是RewriteCond指令:如果该条件变为true,则将应用其后的单个RewriteRule。 RewriteCond的语法很简单:RewriteCond <subject> <regex pattern>;如果模式与主题匹配,则条件将变为真。在我们的例子中,模式是名为REQUEST_URI的服务器变量,您可以从PHP熟悉它,它保存用户请求的URI。这里的模式是正则表达式\.html$。 \这里是一个转义点的转义字符,你可能知道它在正则表达式中具有特殊含义(“匹配任何字符”); $符号表示行尾;的!否定整个表达式,因此如果跟随它的模式不匹配,则条件将为真。因此,RewriteCond行说:“如果请求的URI不以字符串.html结尾”。

然后是RewriteRule指令。其语法为RewriteCond <from> <to> [optional flags]。 'from'部分是要匹配的正则表达式模式。 'to'部分是一个字符串,我们将重写原始查询。在我们的具体示例中,from是(.*):the。意思是“任何角色”,明星的意思是“任何时候”,所以我们基本上都在说“任意数量的任何角色”,这意味着我们想捕捉整个路径。我们把它放在paranthesis中,以便我们以后可以参考捕获的部分。然后我们将其重写为:$1.html,其中$ 1指的是我们在“from”部分捕获的第一个字符串。

就是这样:当我们在地址栏中写“example.com/something”时,将会提供“example.com/something.html”页面。

当然这是非常基本的,它可以改进很多,更优雅和东西,但这应该让你开始。有很多有用的教程,文档也非常有用。