我有一个网站,其中包含一组已放入 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
任何提示将不胜感激?谢谢。
我在一个中找到了答案mod_rewrite 和 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)