我正在尝试将/ 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然后我得到一个无休止的重定向?任何想法为什么会发生这种情况?
由于
答案 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]
请尝试这个,希望它能解决您的问题