HTACCESS 重定向,并在 url 中进行单词替换

Mar*_*wen 2 regex .htaccess mod-rewrite

我在使用这个正则表达式时遇到了问题,我认为它是正确的,但它不起作用。我想做的是重定向一堆包含特定字符串的网址,如下所示:

http://www.example.com/**undesired-string**_another-stringtohttp://www.example.com/**new-string**_another-string

http://www.example.com/folder/**undesired-string**/another-stringtohttp://www.example.com/folder/**new-string**/another-string

所以我在 .htaccess 中有这段代码:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule (.+)+(undesired-string)+(.+) $1new-string$2 [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这应该将任何 url 中的任何不需要的字符串替换为新字符串,但它不起作用,知道为什么吗?

谢谢

Car*_*mDC 5

马文:试试这个:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase / 

RewriteRule ^(.*)undesired-string(.*)$ yoursite.com/$1new-string$2 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php?/$1 [L] 

RewriteCond %{HTTP_HOST} !^www.yoursite.com$ [NC] 
RewriteRule ^(.*)$ yoursite.com//$1 [L,R=301]
 </IfModule>
Run Code Online (Sandbox Code Playgroud)

在上面注释中的“更新”代码中,您将重写条件应用于不需要的字符串...因此,如果实际文件或目录有效,则它不会重写...

不过,这样做总是会用新字符串重写不需要的字符串 - 即使它是一个文件名...如果这很好或者你想要什么,那么你所要做的就是将重写条件移至重写规则以下。 。

另外..仅供参考..如果所有内容都在 yoursite.com 上,则无需列出 yoursite.com

IE

yoursite.com/$1new-string$2
Run Code Online (Sandbox Code Playgroud)

只是需要

/$1new-string$2
Run Code Online (Sandbox Code Playgroud)

它做同样的事情:重写到 yoursite.com 的基本目录

现在,如果他们从 mysite.com 转到 yoursite.com 那么您需要包含域名,因为您正在跨域名重定向


编辑:您可能还想使用:

[QSA,L,R=301] 
Run Code Online (Sandbox Code Playgroud)

而不仅仅是 [L,R=301]