htaccess重定向动态

时间:2012-10-19 08:38:43

标签: .htaccess redirect

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

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

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

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

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

由于

2 个答案:

答案 0 :(得分:0)

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

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

RewriteCond仅适用于直接遵循条件的规则。

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

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

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

# ...
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]

在这里,您匹配包含char

的每个URL

答案 1 :(得分:0)

选项+ FollowSymlinks

上的RewriteEngine

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

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