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 中的任何不需要的字符串替换为新字符串,但它不起作用,知道为什么吗?
谢谢
马文:试试这个:
<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]
| 归档时间: |
|
| 查看次数: |
10208 次 |
| 最近记录: |