使用 .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(临时)重定向进行测试,以避免潜在的缓存问题。
在同一域中,我想进行从 /this/old/path/file.pdf
到 /this/new/path#abc
我试过这个:
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(临时)重定向进行测试,以避免潜在的缓存问题。