1

我刚刚在 Expression Engine 中重建了我们的一个网站,一切都很顺利!我需要创建一堆重定向,希望能修复上一个站点的一些旧 URL。

例子:

旧站点创建的 URL 类似于:index.php?id=30

例如,这个需要重定向到:http ://www.example.com/contact

所以在我的 .htaccess 中,我创建了:

重定向 /index.php?id=30 http://www.example.com/contact

我为所有不同的 ID 做了大约 50 次。但是,当我访问这些链接时,他们只是将我放在主页上并保持 URL 不变。(www.example.com/index.php?id=30)。

然后我注意到它对任何不存在的 URL 执行此操作。所以我可以输入:

www.example.com/asdasdjasdbjhasdbjhasdbjhasdbjhasdbjhasd

它只是让我在主页上。

这是我的 .htaccess 文件中的其他内容以及一些重定向示例。这第一位只是从 URL 中删除 /index.php。

重写引擎开启

    # Removes index.php from ExpressionEngine URLs
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]

Redirect /index.php?id=30 http://www.example.com/contact

Redirect /index.php?id=26 http://example.com/careers

Redirect /index.php?id=28 http://example.com/about

那么这里发生了什么,Expression Engine 是否内置了破坏我的重定向的重定向?

谢谢您的帮助!

4

1 回答 1

0

您无法匹配Redirect语句中的查询字符串,您需要使用 aRewriteCond并匹配%{QUERY_STRING}变量。确保在表达式引擎规则之前添加这些规则:

RewriteCond %{QUERY_STRING} ^id=30
RewriteRule ^/?index.php$ http://www.example.com/contact [L,R]
RewriteCond %{QUERY_STRING} ^id=26
RewriteRule ^/?index.php$ http://www.example.com/careers [L,R]
RewriteCond %{QUERY_STRING} ^id=28
RewriteRule ^/?index.php$ http://www.example.com/about [L,R]

等等

于 2013-01-22T05:59:16.460 回答