0

我正在尝试将 /en/news/12345 重定向到http://www.xyz.com/en/newsletters/12345

唯一的问题是“en”和“12345”可以改变,但“news”总是一样的。

到目前为止,我有以下内容:

RewriteRule /^(.)/news/(.)$ http://www.xyz.com/ $1/news / $ 2 [R=301,L]

但是如果我去 mydomain/wp-admin 那么我会得到一个无休止的重定向??任何想法为什么会发生这种情况?

谢谢

4

2 回答 2

0

我想我在您的 .htaccess 文件中发现了问题。最初,当路径指向现有文件或文件夹(忽略文件)时,您有两个条件阻止RewriteRule . /swissfil3/index.php [L](全部)重定向:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond 仅适用于条件直接跟随的规则。

当您直接在这些指令下方添加新规则时,不会阻止包罗万象的规则重定向现有文件或目录,如 /wp-admin。即在catch-all 之前不匹配任何规则的每个请求都将被重定向到/swissfin/3/index.php。

此外,您曾经(.)捕获路径的每个部分。这将匹配一个任意字符,但不再匹配,因此您的重定向将被限制为 /X/news/Y,而不是 /XX/news/YYYY...,要解决此问题,您可以使用(.+)匹配零个或多个字符, 或者更好([^/]*)的匹配零个或多个不等于 / 的字符。

您应该能够通过使用以下代码来避免这些问题(其中 catch-all 指令已直接移动到 ignore-on-file 下方,并且重写规则匹配零个或多个不等于 / 的字符):

# ...
RewriteRule ^([^/]*)/news/([^/]*)$ http://www.xyz.com/$1/news/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /swissfin3/index.php [L]

在这里,您匹配每个包含字符的 URL

于 2012-10-19T08:54:17.320 回答
0

选项 +FollowSymlinks

重写引擎开启

RewriteRule ^en/news/([0-9]) http://www.xyz.com/en/newsletters/ $1 [NC]

请试试这个,希望它能解决你的问题

于 2012-10-19T09:48:08.110 回答