我想我在您的 .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