0

我正在尝试使用 mod_rewrite 来生成更清晰的 url。

我的 .htaccess 中有以下内容

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^mypage.php$ https://%{HTTP_HOST}/mypage [R=301,L]

目标是从 https://mysite.com/mypage.phphttps://mysite.com/mypage

这给了我一个 404 错误。我实际上没有目录 mypage/ 存在。但据我了解,我不需要真正让 mypage 让 mod_rewrite 工作。我究竟做错了什么?

4

1 回答 1

1

mod_rewrite 输出必须存在吗?

重写规则的替代目标要么必须存在,要么与存在替代目标的其他规则匹配。你所得到的只是将浏览器重定向到一个不存在的 URL,所以毫无疑问你会得到一个 404 错误。

您可以添加另一个规则以重写/mypage /mypage.php但随后您将创建一个无限循环。“mypage.php”将被重定向到“mypage”,该“mypage”将被重写为“mypage.php”,“mypage.php”将被重定向到“mypage”等。

您需要在上面的规则中添加一个额外的约束:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /mypage\.php
RewriteRule ^mypage.php$ https://%{HTTP_HOST}/mypage [R=301,L]

将使其仅在实际请求为 mde for时重定向/mypage.php,而不仅仅是检查 URI,这可能会被其他规则更改。然后你只需要在内部重写它:

RewriteRule ^mypage/?$ /mypage.php [L]

请参阅此答案的顶部以更好地解释其工作原理:https ://stackoverflow.com/a/11711948/851273

于 2012-09-20T21:42:02.700 回答