Chr*_*row 4 .htaccess redirect
刚刚重新完成了我的网站,并尝试在 .htaccess 文件中为已更改的链接设置重定向
这工作正常,但它不适用于/example/
(在源路径上带有斜杠)
Redirect 301 /example /example.php
Run Code Online (Sandbox Code Playgroud)
所以我添加了这个来解释尾部斜杠:
Redirect 301 /example/ /example.php
Run Code Online (Sandbox Code Playgroud)
但这会重定向到example.php/
(向目标添加斜杠,这不起作用)
显然我做错了。什么是更好的方法?
但这会重定向到
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
Run Code Online (Sandbox Code Playgroud)
但是,该Redirect
指令实际上并不是此处使用的正确指令,因为您需要两个指令来处理此问题。(一般情况下,用Redirect
指令,则需要包含或排除在结尾的斜线都源和目标URL)。
您可以改用该RedirectMatch
指令,它使用正则表达式匹配。例如,要处理有和没有尾部斜杠:
RedirectMatch 301 ^/example/?$ /example.php
Run Code Online (Sandbox Code Playgroud)
这仅匹配/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]
Run Code Online (Sandbox Code Playgroud)
请注意,在使用时,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]
Run Code Online (Sandbox Code Playgroud)
(我还删除了RewriteRule
替换上的斜杠前缀,现在不需要,因为我们正在重写文件系统路径。)
如果您/example
在 HTML 源代码中提供链接,则用户不会意识到该请求确实映射到example.php
.
归档时间: |
|
查看次数: |
1587 次 |
最近记录: |