我将网站的 / news / 部分移至 / about / news / 。现在我需要将旧链接重定向到已移动的页面。我尝试在.htaccess中使用RewriteRule,但它似乎不起作用:
RewriteEngine on
RewriteBase /
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
RewriteRule ^$ inner.php?pathstring=/main/
RewriteRule ^(.+str=.*)$ inner.php?path=$1 [L]
RewriteRule ^([^\.]+)$ inner.php?path=$1 [QSA]
RewriteRule ^/news/(.*)$ about/news/$1 [R,L]
我在这里发布了我的整个.htacces,因为它是由现在不可用的其他人编写的,并且在php中是一个菜鸟,我有些担心它会影响我的attemts以某种方式重定向。
答案 0 :(得分:1)
你的问题是你的第三个RewriteRule:
RewriteRule ^([^\.]+)$ inner.php?path=$1 [QSA]
尸检:
^
- 字符串必须以下一场比赛开始 ([^\.]+)
- 匹配任何非.
的字符(您需要在正则表达式中.
转义为“任意字符”)1到无穷大时间(这是+
) $
- 字符串必须以上一场比赛结束 ..因此,只有当网址中没有.
时,您在底部的重定向才有效,例如。 /news/blabla/mysite.html
。
如何解决?只需将其移到其他规则之上,以便首先尝试匹配它。如果您的更改是永久性的,您还应该将R
更改为R=301
,以确保它发送301 Moved Permanently
而不是302 Found
(不会被缓存)。< / p>
RewriteRule ^/news/(.*)$ about/news/$1 [R=301,L]
RewriteRule ^$ inner.php?pathstring=/main/
RewriteRule ^(.+str=.*)$ inner.php?path=$1 [L]
RewriteRule ^([^\.]+)$ inner.php?path=$1 [QSA]
答案 1 :(得分:0)
试试这段代码:
RewriteEngine On
RewriteRule ^(news(?:/.*)?)$ /about/$1 [R=301,L,NC]
RewriteRule ^$ inner.php?pathstring=/main/ [L,QSA]
RewriteRule ^(.+?str=.*)$ inner.php?path=$1 [L,QSA,NC]
RewriteRule ^([^.]+)$ inner.php?path=$1 [L,QSA]