我遇到这个reg表达式的问题,我相信这是正确的,但它不起作用。
我想要做的是重定向一堆包含特定字符串的网址,如下所示:
http://www.example.com/**undesired-string**_another-string
至http://www.example.com/**new-string**_another-string
和
http://www.example.com/folder/**undesired-string**/another-string
到http://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,但它不起作用,不知道为什么?
谢谢
答案 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>