复杂的 mod 重写

复杂的 mod 重写

客户要求我执行一些特定的重定向(将旧服务器退役到新服务器的一部分)。我一直在为此绞尽脑汁,这让我发疯!

实际上,我需要同时执行两个 .htaccess mod-rewrite。我原以为这会是一件非常简单的事情,但我已经尝试了所有我能想到的方法,所以是时候寻求建议了。

我需要执行以下操作:

更为复杂的是,由于 Web 资源可能位于不同的新文件夹位置 (newfolder1、newfolder2、newfolder3),因此需要重复此操作。

目前,我的.htaccess 段如下所示:

    <IfModule mod_rewrite.c>
       RewriteEngine on

       RewriteCond         "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}"  -f
       RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder1/$1"            [L]
       RewriteCond         "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}"  -f
       RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder2/$1"            [L]
       RewriteCond         "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}"  -f
       RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder3/$1"            [L]
       RewriteRule   "^"  "-"  [PT]

这对于重定向文件夹很有效它只适用于一些网络资源尚未包含.html

我努力了:

RewriteRule "%{REQUEST_URI}[^.html]" "%{DOCUMENT_ROOT}/newfolder1/$1"  [L]
RewriteRule "^(.*).html$" "%{DOCUMENT_ROOT}/newfolder1/$1"  [L]

以及许多类似的变化,但我没有取得任何进展。

答案1

好吧,事实证明 Wordpress(新系统)将为我完成很多繁重的工作,而我却选错了方向。

老的网址(http://example.com/oldfolder/some-web-resource.html) 具有 html 扩展名,并且由于错误,我意识到这是我唯一需要更改的东西 - Wordpress 将为我替换“文件夹名称”,作为“是的,你的 URL 不好”检查的一部分。

因此我的修复方法很简单,只需在 .htaccess 文件顶部添加以下行: RedirectMatch "^(/oldfolder/.*).html" "$1"

现在,如果请求的 URL 是http://example.com/oldfolder/blah.html,将使用http://example.com/oldfolder/blah然后 Wordpress 将完成剩下的工作,根据请求的 URI 的其余部分根据需要更改为 newfolder1、newfolder2、newfolder3 等。

你相信吗我花了四个小时才弄明白?

相关内容