404错误:Mod_Rewrite无法正常工作

时间:2009-07-07 13:52:27

标签: apache .htaccess mod-rewrite

我设法从上一个问题中得到了一些帮助,我的网络根目录中的.htaccess中有以下内容。

# REWRITE DEFAULTS
RewriteEngine On
RewriteBase /

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^/view\.php$ /%2 [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^/(.*) /view.php?t=$1

但是,如果我输入: http://www.example.com/7hde ,它只会给我404错误。

我错过了什么吗?

全部谢谢

更新

这就是我现在所拥有的:

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^t=([0-9a-z]+)$
RewriteRule ^view\.php$ /%1 [L,R=301,QSA]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^([0-9a-z]+)$ view.php?t=$ [L,QSA]

它似乎工作但我不能使用查询字符串。每次我试图获得t的值。我得到这个“$”?!

3 个答案:

答案 0 :(得分:4)

在.htaccess文件中使用mod_rewrite时(请参阅Per-directory Rewrites),在测试规则之前会删除上下文每目录路径前缀,并在应用规则后附加。

在您的情况下,需要从您的模式和替换中删除前导/

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^view\.php$ /%2 [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^(.*) view.php?t=$1

您忘记了last question中的信息。否则我会在那时告诉你的。

答案 1 :(得分:2)

使用它来调试:

LogLevel trace8 rewrite:trace8

过时的选项:

RewriteLog /tmp/mylog
RewriteLogLevel 9

答案 2 :(得分:0)

使用第二条规则将http://www.example.com/7hde重写为http://www.example.com/view.php?t=7hde。然后它应用第一个规则并将查询字符串更改为http://www.example.com/7hde作为最后一条规则,这显然是无效的。

摆脱第一条规则。