【问题标题】:Using mod_rewrite and mod_alias (redirect 301) together in .htaccess?在 .htaccess 中同时使用 mod_rewrite 和 mod_alias(重定向 301)?
【发布时间】:2011-06-18 21:03:12
【问题描述】:

我有一个站点,其中包含一组已放入 CMS 的旧 .html 和 .php 页面。

目前在 .htaccess 文件中大约有 30 个 mod_alias 重定向,格式如下:

redirect 301 /oldpage1.html http://www.example.com/newpage1.php
redirect 301 /oldpage2.php http://www.example.com/newpage2.php
redirect 301 /oldpage3.php http://www.example.com/newpage3.php

但我们想使用 mod_rewrite 在我们的 CMS 中拥有漂亮的 URL,其形式为 http://www.example.com/pagename.php,因此也有以下内容:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1

目前两者正在一起应用,结果是:

http://www.example.com/newpage1.php?page=oldpage1.html

如何仅在 mod_alias 重定向 301 语句未进行匹配时应用重写规则,以便发生以下情况:

http://www.example.com/oldpage1.html -> 重定向到 -> http://www.example.com/newpage1.php -> 被视为 -> http://www.example.com/index.php?page=/newpage1.php

任何提示将不胜感激?谢谢。

【问题讨论】:

    标签: .htaccess mod-rewrite redirect mod-alias


    【解决方案1】:

    我在great explanation of mod_rewrite and mod_alias 中找到了答案

    问题是 mod_rewrite 总是出现在 mod_alias 之前,无论它们在 .htaccess 中的顺序如何。这与这种情况所需的顺序相反。

    诀窍是使用RewriteRule [R=301] 而不是redirect 301,因此对所有内容都使用 mod_rewrite 而不是将其与 mod_alias 混合使用。

    完整解决方案如下:

    RewriteEngine on
    RewriteBase /
    
    RewriteRule ^oldpage1.html /newpage1.php [R=301,L]
    RewriteRule ^oldpage2.php /newpage2.php [R=301,L]
    RewriteRule ^oldpage3.php /newpage3.php [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php?page=$1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多