在url中使用单词替换的HTACCESS重定向

时间:2011-01-07 20:21:50

标签: regex .htaccess mod-rewrite

我遇到这个reg表达式的问题,我相信这是正确的,但它不起作用。 我想要做的是重定向一堆包含特定字符串的网址,如下所示:

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

http://www.example.com/folder/**undesired-string**/another-stringhttp://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>

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

谢谢

3 个答案:

答案 0 :(得分:4)

马文:试试这个:

<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>

在上面评论中的“更新”代码中,您已将重写条件应用于非期望字符串...因此,如果实际文件或目录有效,则不会重写...

这样做虽然总是会用new-string重写不受欢迎的字符串 - 即使它是一个文件名......如果这很好或你想要什么,那么你所要做的就是将你的重写条件移到重写之下规则...

也..只是一个假..如果一切都在yoursite.com上你不需要列出yoursite.com

即。

yoursite.com/$1new-string$2

只需要

/$1new-string$2

执行相同的操作:重写到yoursite.com的基本目录

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


编辑:您可能还想使用:

[QSA,L,R=301] 

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

答案 1 :(得分:3)

你的正则表达式并不正确。尝试:

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

如果这不起作用,请尝试:

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

说明: ^标志着开始; $标志着结束;第一个(..)转到$ 1,第二个(..)转到$ 2,依此类推; *是0或更多字符; +是一个或多个字符。

答案 2 :(得分:0)

回答我自己的问题。 Laravel已经重定向了斜杠。问题是Laravel被安装到子目录中。我将子目录的位置添加到重定向。我在这种情况下的位置是:“/ lumen / public /”。请参阅下面的固定htaccess。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /lumen/public/$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>