使用 .htaccess 重定向 url 正在添加旧路径

Redirect url with .htaccess is adding old path

在同一域中,我想进行从 /this/old/path/file.pdf/this/new/path#abc

的 301 重定向

我试过这个:

Redirect 301 /this/old/path/file.pdf /this/new/path#abc

它执行重定向但显示以下路径:

/this/new/path#abc?/this/old/path/file.pdf

应该是:

/this/new/path#abc

这里有什么问题吗?

---更新 这是我的 .htaccess 文件的内容 usign just redirect

RewriteOptions inherit
Options FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine on
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/ [L]

    Redirect 301 /this/old/path/file.pdf /this/new/path#abc
</IfModule>

并使用 RewriteRule

RewriteOptions inherit
Options FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine on
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/ [L]

    RewriteCond %{HTTP_HOST} ^mydomain.com$
    RewriteRule /this/old/path/file.pdf /this/new/path#abc [NE,R=301]
</IfModule>

这不会进行任何重定向

不知道这是否重要,但我正在使用 CPanel。

Redirect (mod_alias) 指令在 mod_rewrite RewriteRule 指令之后应用,因此您看到的查询字符串是由较早的 RewriteRule 内部重写。你基本上在 mod_alias 和 mod_rewrite 之间有冲突。

您需要使用 mod_rewrite RewriteRule 指令,而不是 现有规则之前,紧接在 RewriteEngine 指令之后。不是最后。顺序很重要。

例如:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^this/old/path/file\.pdf$ /this/new/path#abc [NE,R=301,L]

请注意,与 RewriteRule 模式 匹配的 URL-path 不以斜杠开头。 RewriteRule 指令( 模式)的第一个参数是正则表达式,因此需要应用必要的转义和锚点。

如果您需要此规则仅应用于指定的域,则检查 HTTP_HOST 服务器变量的 条件 是必需的。

需要 NE 标志以防止 # 字符在响应中成为 URL-encoded(否定其作为片段标识符定界符的含义)。

您需要在测试前清除浏览器缓存。并首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。