我刚刚重新设计了我的网站,并尝试在 .htaccess 文件中为已更改的链接设置重定向
这工作正常,但它不适用于/example/
(源路径上带有尾部斜杠)
Redirect 301 /example /example.php
因此我添加了这个来解释尾随的斜杠:
Redirect 301 /example/ /example.php
但这会重定向到example.php/
(在目的地后面添加一个斜杠,这是不起作用的)
显然我做错了。有什么更好的方法吗?
答案1
但这会重定向到
example.php/
这是由第一条(原始)规则引起的。请注意,较早的(错误)301 很可能已被浏览器缓存。使用 302(临时)重定向进行测试以避免潜在的缓存问题。
该Redirect
指令是前缀匹配(整个路径段),匹配后的所有内容都附加到目标 URL 的末尾。因此,第一个指令重定向:
/example
到/example.php
/example/
至/example.php/
和/example/abc
到/example.php/abc
如果指令按如下顺序排列,那么它们应该对发布的两个示例 URL 有效:
Redirect 301 /example/ /example.php
Redirect 301 /example /example.php
但是,该Redirect
指令实际上并不是此处要使用的正确指令,因为您需要两个指令来处理此问题。(通常,使用该Redirect
指令,您需要在两个都源 URL 和目标 URL。
您可以改用RedirectMatch
使用正则表达式匹配的指令。例如,要处理带有和不带有尾部斜杠的情况:
RedirectMatch 301 ^/example/?$ /example.php
这仅匹配/example
或/example/
并重定向到/example.php
。
Redirect
并且RedirectMatch
都是 mod_alias 的一部分。
但是,如果你已经在使用 mod_rewrite,那么请考虑使用 mod_rewriteRewriteRule
来避免潜在的冲突,因为 mod_rewrite 总是运行前mod_alias,尽管 中的指令顺序明显不同.htaccess
。例如:
RewriteEngine On
RewriteRule ^example/?$ /example.php [R=301,L]
请注意,RewriteRule
图案当使用在.htaccess
URL 路径中时图案匹配的目录前缀(总是结束带有斜线)被删除。
还要注意,每个模块内的指令的顺序也很重要。
在旁边:如果你已经“重新设计”了网站,为什么“新”的 URL 形式是这样的/example.php
?这似乎有点落后?
更新:我请人将原来的 wordpress 网站转换为(几乎)等效的网站,该网站仅使用 HTML 和少量 javascript 和 php
您可以保留原始的 WordPress URL(例如/example
)和内部重写将请求发送到处理该请求的底层文件(即example.php
),而不是外部重定向。为此,您需要使用 mod_rewrite。您还需要在 HTML 源代码中链接到“旧”WordPress URL。例如/example
(并考虑规范化尾部斜杠 - 重定向到其中一个)。
到内部重写 /example
(或/example/
)/example.php
您只需R
从上面的RewriteRule
指令中删除标志即可。例如:
RewriteRule ^example/?$ example.php [L]
(我还删除了RewriteRule
代换,由于我们正在重写文件系统路径,所以现在不需要这样做。)
在您的 HTML 源代码中提供链接到,/example
那么用户并不知道请求实际上已映射到example.php
。