微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

URL重写:内部服务器错误

我有一个关于Apache的重写规则的小问题

这是我的规则

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule query/(.*) /PHP/query.PHP?name=$1 [L] RewriteRule page/(.*) /PHP/page.PHP?page=$1 [L]

它完美的作品。 但是,当我尝试添加以下规则来重写不符合前两个规则的URL时

RewriteRule .* /PHP/page.PHP?page=home

服务器响应“内部服务器错误”。 为什么?

为什么dir_module似乎没有加载,虽然显然是加载在httpd.conf和模块文件夹?

通过multipartentity发送Unicode字符

在Apache和Wsgi上部署Django

启用Log4J2 + Apache HttpClient的debugging日志logging

Windows环境variablesvsconfiguration文件

.htaccess中的基本URL

使用Apache Camel UnZippedMessageProcessor解压缩文件

更改documentroot之后,xampp仍然使用认的PHPmyadmin

如何在Ubuntu上安装Phusion Passenger 4(在apache2或Nginx上)?

禁用Apache日志access.log

你可以使用RewriteLog来查看发生了什么事情,但是即使使用了[L]你也可以确定一个重写的URL总是在规则集上重新检查(这是调用内部重定向)。

所以在最终的catch-all之前添加一些RewriteCond ,或者防止它在内部重定向上运行,这样:

RewriteCond %{ENV:REDIRECT_STATUS} ^$

你也可以在最后的catch-all上添加[NS]或者[nosubreq]标签,这也是一样的。

但是防止你对内部重定向的规则也意味着在任何以前的规则之后它永远不会被应用,有一天你可能会需要它。 所以要小心下一个规则。

谢谢 !

最后,这是我的解决方案:

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule query/(.*) /PHP/query.PHP?name=$1 [L] RewriteRule page/(.*) /PHP/page.PHP?page=$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ page/home [L,R] RewriteRule ^$ page/home [NS,R]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐