重定向 301 附加旧的 URL 和新的 URL
Redirect 301 appending old URL with New URL
我在重定向 URL 已更改的页面时遇到问题,但我希望将旧 URL 重定向到新页面。这是.htaccess
文件
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/ [R,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/ [L,R=301]
RewriteEngine On
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
在最后一行使用 mod_rewrite 我没有被重定向到新的 URL 但是当我使用 mod_alias(重定向)规则时我被重定向到新的 URL但是 Old URL 以这种格式附加到其中。
https://example.com/contact-us/?/contactus/
我在 Stack Overflow 上搜索了这个问题的解决方案,并尝试了许多类似的方案,但都没有用。
按给定的顺序排列。
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,NE,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]
RewriteRule ^contactus/$ /contact-us/ [R=301,NC,L]
RewriteCond %{REQUEST_URI} ^/system [NC]
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
RewriteEngine On
在同一个 .htaccess 中不需要多次。
确保在测试更改之前清除浏览器缓存。
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/ [R,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/ [L,R=301]
RewriteEngine On
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
您的 mod_rewrite 外部重定向(最后三个规则)位置错误。这些需要 before 内部重写(前端控制器)。通过将它们放在文件的末尾,它们将永远不会为静态资源以外的任何 URL 进行处理,因为所有其他 URL 都被路由到 index.php
,此时处理停止。
when I use mod_alias(Redirect) rule I get redirected to new URL but Old URL gets appended
无论配置文件中指令的顺序如何,不同的模块都是独立处理的。 mod_alias 在 mod_rewrite 之后被处理 - 但它已被处理。但是,Redirect
指令是前缀匹配,匹配后的所有内容都附加到目标 URL.
的末尾
并且无需重复 RewriteEngine
指令
你的指令是这样的:
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/ [L,R=301]
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
RewriteCond %{REQUEST_URI} ^/system
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
并确保在测试前清除浏览器缓存。最好使用 302(临时)重定向进行测试以避免缓存问题。
我在重定向 URL 已更改的页面时遇到问题,但我希望将旧 URL 重定向到新页面。这是.htaccess
文件
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/ [R,L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/ [L,R=301]
RewriteEngine On
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
在最后一行使用 mod_rewrite 我没有被重定向到新的 URL 但是当我使用 mod_alias(重定向)规则时我被重定向到新的 URL但是 Old URL 以这种格式附加到其中。
https://example.com/contact-us/?/contactus/
我在 Stack Overflow 上搜索了这个问题的解决方案,并尝试了许多类似的方案,但都没有用。
按给定的顺序排列。
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,NE,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]
RewriteRule ^contactus/$ /contact-us/ [R=301,NC,L]
RewriteCond %{REQUEST_URI} ^/system [NC]
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
RewriteEngine On
在同一个 .htaccess 中不需要多次。
确保在测试更改之前清除浏览器缓存。
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/ [R,L] RewriteEngine On RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.com/ [L,R=301] RewriteEngine On RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
您的 mod_rewrite 外部重定向(最后三个规则)位置错误。这些需要 before 内部重写(前端控制器)。通过将它们放在文件的末尾,它们将永远不会为静态资源以外的任何 URL 进行处理,因为所有其他 URL 都被路由到 index.php
,此时处理停止。
when I use mod_alias(Redirect) rule I get redirected to new URL but Old URL gets appended
无论配置文件中指令的顺序如何,不同的模块都是独立处理的。 mod_alias 在 mod_rewrite 之后被处理 - 但它已被处理。但是,Redirect
指令是前缀匹配,匹配后的所有内容都附加到目标 URL.
并且无需重复 RewriteEngine
指令
你的指令是这样的:
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/ [L,R=301]
RewriteRule ^contactus/$ http://example.com/contact-us/ [R=301,L]
RewriteCond %{REQUEST_URI} ^/system
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/ [L]
并确保在测试前清除浏览器缓存。最好使用 302(临时)重定向进行测试以避免缓存问题。