用于精确表达式的mod_rewrite规则不起作用

时间:2013-05-05 14:20:57

标签: .htaccess mod-rewrite

我对mod_rewrite的工作量不大,所以我很容易就会错过一些简单的东西。我想匹配并替换特定的URL。我想重写的URL如下所示:

http://www.sample.com/hellohttp://www.sample.com/index.php?page=hello

我的htaccess目前有以下规则:

RewriteRule ^(hello)/?$ index.php?page=$1 [L]

但是,当我实施规则并尝试转到http://www.sample.com/hellohttp://www.sample.com/hello/进行测试时,我总是会收到404错误文档。我觉得它应该很简单,我必须在那里遗漏一些东西。任何帮助都会很棒,非常感谢!

以下是我的整个文件供参考:

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?sample\.com/ [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(gif|png) [NC]
RewriteRule ^(.*)\.(gif|jpe?g|png)$ sample.com/hotlink.png[R,NC,L]

RewriteCond %{HTTP_HOST} ^www.sample\.com$ [NC]
RewriteRule ^(.*)$ http://sample.com/$1 [R=301,L]

RewriteRule ^(hello)/?$ index.php?page=$1 [L]

由于

2 个答案:

答案 0 :(得分:0)

您的代码对我来说非常好。也许你错过了

RewriteEngine On
RewriteRule ^(hello)/?$ page.php?page=$1 [L]

或者根本没有安装或加载mod_rewrite。 寻找

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

在主apache配置文件httpd.conf

答案 1 :(得分:0)

这是其中一次......

我清除了htaccess文件,只使用了以下几行并对其进行了测试:

Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /
#
RewriteRule ^(hello)/?$ page.php?page=$1 [L]

我意识到它在非自定义404页面上引用了page.php而不是index.php!

Not Found

The requested URL /page.php was not found on this server.

结果我的所有编辑都错误地在规则中输入了page.php而不是index.php。我纠正了它,规则有效。其中一次:)

全部谢谢!