gpt4 book ai didi

.htaccess - 在 .htaccess 中一起使用 mod_rewrite 和 mod_alias(重定向 301)?

转载 作者:行者123 更新时间:2023-12-02 23:37:22 24 4
gpt4 key购买 nike

我有一个网站,其中包含一组已放入 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

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

最佳答案

我在 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

关于.htaccess - 在 .htaccess 中一起使用 mod_rewrite 和 mod_alias(重定向 301)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com