htaccess 中的重定向是将目录添加到新 URL;未正确重定向 ExpressionEngine URL

发布于 2024-12-09 18:38:35 字数 834 浏览 0 评论 0原文

我正在尝试为新的 ExpressionEngine 站点设置重定向规则。

我正在使用放置在我网站的 .htaccess 文件中的以下代码(后一部分是 从 ExpressionEngine 的 URL 中删除 index.php - 这有效):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RedirectMatch 301 ^/2010/example/*$ http://sub.domain.com/new-page/$1

    # 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]
</IfModule>

发生了某种重定向,但我得到的 URL 是这样的:

http://sub.domain.com/new-page2010/example/

我已经尝试过不同的组合,它让我抓狂!关于我哪里出错的任何提示?

I'm trying to setup a redirect rule for a new ExpressionEngine site.

I'm using the following code placed in my site's .htaccess file (the latter section is to remove index.php from ExpressionEngine's URLs - this works):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RedirectMatch 301 ^/2010/example/*$ http://sub.domain.com/new-page/$1

    # 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]
</IfModule>

A redirect of sort happens, but the URL I get is this:

http://sub.domain.com/new-page2010/example/

I've tried different combinations and it's driving me up the wall!! Any tips on where I'm going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

网名女生简单气质 2024-12-16 18:38:35

Apache 的 RedirectMatch 指令 的语法要求在正则表达式:

提供的正则表达式与 URL 路径相匹配,并且
如果匹配,服务器将替换任何括号内的匹配项
到给定的字符串中。

使用RedirectMatch相当于重定向,但使用标准正则表达式,而不是简单的前缀匹配。

因此,纠正您的示例,有效的 RedirectMatch 指令将是:

RedirectMatch 301 ^/2010/example/(.*)$ http://sub.domain.com/new-page/$1

您可以通过使用 RewriteRule 相反:

RewriteRule ^2011/example/(.*)$ http://sub.domain.com/new-page/$1 [R=301,L]

根据您想要重定向的内容(单个页面还是整个子目录),您可能需要修改每个页面中的原始 URL 路径 例子。

The syntax for Apache's RedirectMatch Directive expects the use of parenthesis in the RegEx:

The supplied regular expression is matched against the URL-path, and
if it matches, the server will substitute any parenthesized matches
into the given string.

Using a RedirectMatch is equivalent to Redirect, but makes use of standard regular expressions, instead of simple prefix matching.

Therefore correcting your example, a valid RedirectMatch Directive would be:

RedirectMatch 301 ^/2010/example/(.*)$ http://sub.domain.com/new-page/$1

You can tap in the full power of Apache's rewrite engine by using a RewriteRule instead:

RewriteRule ^2011/example/(.*)$ http://sub.domain.com/new-page/$1 [R=301,L]

Depending on what you're wanting to redirect — a single page vs. entire sub-directory — you may need to modify the original URL path in each example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文