我需要帮助在我的新 php 站点的 htaccess 文件中放置 301 重定向

问题描述 投票:0回答:2

我有一个php网站,我目前的

.htaccess
文件如下:

<IfModule mod_rewrite.c>

#Options +FollowSymlinks


RewriteEngine On


RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php?page=$1 [NC,L,QSA]


Options -Indexes


</IfModule>

现在我想对 URL 进行 301 重定向。从

example.com/folder/old-url-london.htm
example.com/new-url-london/

问题是每次我尝试我得到的东西:

www.example.com/new-url-london/?page=folder/old-url-london.htm

现在我不能改变这条线(

RewriteRule ^(.*)$ /index.php?page=$1 [NC,L,QSA]
),因为它对网站的工作至关重要。

有什么想法吗?

我试过以下方法:

Redirect 301 /folder/old-url-london.htm example.com/new-url-london/

以及

RewriteRule ^folder/old-url-london.htm$ /new-url-london/ [R=301,L]
apache .htaccess redirect mod-rewrite
2个回答
0
投票

听起来你可能把规则放在了错误的地方。或者使用

Redirect
指令。和/或现在可能正在看到缓存的响应。

您需要使用 mod_rewrite

RewriteRule
以避免与现有的重写冲突并且规则需要位于文件的顶部,before 现有的重写并且理想情况下在
RewriteEngine
指令之后。

例如:

Options +FollowSymlinks -Indexes

RewriteEngine On

RewriteRule ^folder/old-url-london\.htm$ /new-url-london/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?page=$1 [QSA,L]

您需要在测试前清除浏览器缓存,因为任何错误的 301(永久)重定向都将被浏览器缓存。为此,首先使用 302(临时)重定向进行测试。

不要忘记在正则表达式中反斜杠转义文字点。

我整理了一些其他的东西:

  • <IfModule>
    不需要包装纸。
  • 在顶部组合
    Options
    并重新启用
    FollowSymLinks
    (因为mod_rewrite需要它)
  • RewriteBase
    在您发布的指令中不是必需的。
  • 删除了虚假间距。
  • NC
    不需要重写标志,因为模式
    .*
    已经匹配所有内容。
  • 不需要模式
    ^(.*)$
    上的锚点,因为默认情况下正则表达式是贪婪的。

0
投票

你的回答很有效!很有帮助谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.