我设法从上一个问题中得到了一些帮助,我的网络根目录中的.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的值。我得到这个“$”?!
答案 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
作为最后一条规则,这显然是无效的。
摆脱第一条规则。