重写规则检查字符串是否存在

时间:2015-05-13 14:55:57

标签: regex apache .htaccess mod-rewrite

我需要RewriteRulehttp://domain.org/foo/bar的网址更改为http://domain.org/de/foo/bar但如果有http://domain.org/en/foo/barhttp://domain.org/de/foo/bar

所以如果没有en/而没有de/那么它应该添加de/,否则它应该什么都不做

怎么办呢?我已经使用正则表达式玩了一下,但我不知道如何检查是否有en/或者是否有en/

帮助非常感谢。

更新 我当前的规则是运行wordpress时应该具有的默认规则:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

UPDATE2:

这是wordpress,de /和en /不是实际文件夹..它们由多语言插件使用。因为我对这个插件有一些问题,我需要重定向,如上所述。

2 个答案:

答案 0 :(得分:2)

一般情况下,如果没有任何其他规则,这会重定向任何不以/en/foo/bar开头的内容。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/en [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /de/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

答案 1 :(得分:1)

您可以在根目录中使用此规则.htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!(?:en|de)).*)$ de/$1 [L,NC,R]

将此规则保留在默认WP规则之前。

编辑完整.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!(?:en|de)).*)$ de/$1 [L,NC,R]

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

# END WordPress