0

我想使用mod_rewrite来生成更清洁的网址。mod_rewrite输出必须存在吗?

我在我的.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 /现有的。但从我的理解,我不需要真正有我的页面mod_rewrite工作。我究竟做错了什么?

回答

1

确实mod_rewrite输出存在吗?

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

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

您需要为上面的规则添加额外的约束:

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

将使它所以只重定向如果实际要求是MDE为/mypage.php,而不是仅仅检查对URI,可以通过其他规则得到改变。然后,你只需要在内部改写回:

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

看到这个答案的顶部是如何工作的一个更好的解释:https://stackoverflow.com/a/11711948/851273

相关问题