我需要RewriteRule
将http://domain.org/foo/bar
的网址更改为http://domain.org/de/foo/bar
但如果有http://domain.org/en/foo/bar
或http://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 /不是实际文件夹..它们由多语言插件使用。因为我对这个插件有一些问题,我需要重定向,如上所述。
答案 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