我不确定基于 URL 进行重定向的最有效方法。我已经看到了接近我需要的 htaccess 示例,但我根本不了解它背后的编程。这是我需要发生的事情:
- 检查页面是否为“watch.html”。
- 如果 URL 显示为“watch?blahblah”而不是“watch.html?blahblah”,则重定向。
- 基本上如果 URL 没有 .html
- 重定向到添加了 .html 的同一页面。
感谢您对编写此代码的任何帮助。
不,我觉得完全没问题。mod_rewrite 模块有一个相当晦涩的语法,它可能非常令人沮丧。
你想要的东西可以这样写:
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule (.*) $1.html
首先我们打开重写引擎。然后是RewriteCond指令:如果该条件评估为真,则将应用其后的单个 RewriteRule。RewriteCond 的语法很简单RewriteCond <subject> <regex pattern>
:如果模式与主题匹配,则条件将评估为真。在我们的例子中,模式是名为 REQUEST_URI 的服务器变量,您可能对 PHP 很熟悉,它保存用户请求的 URI。这里的模式是正则表达式\.html$
. 这里的 \ 是一个转义字符,用于转义点,您可能知道它在正则表达式中具有特殊含义(“匹配任何字符”);$ 符号表示行尾;这 !否定整个表达式,因此如果它后面的模式不匹配,则条件将为真。因此,RewriteCond 行说:“如果请求的 URI 不以字符串 .html 结尾”。
然后是RewriteRule指令。它的语法是RewriteCond <from> <to> [optional flags]
. 'from' 部分是要匹配的正则表达式模式。'to' 部分是我们将重写原始查询的字符串。在我们的具体示例中,from 是(.*)
:. 表示“任何字符”,星表示“任何时间”,所以我们基本上是在说“任意数量的任何字符”,这意味着我们想要捕获整个路径。我们把它放在括号中,以便我们以后可以参考捕获的部分。然后我们将其重写为: $1.html
,其中 $1 指的是我们在“from”部分捕获的第一个字符串。
就是这样:当我们在地址栏中写“example.com/something”时,将提供页面“example.com/something.html”。
当然,这是非常基本的,可以改进很多,使其更优雅,但这应该可以帮助您入门。周围有很多有用的教程,文档也很有帮助。