1

我有这个 .htaccess 文件,当我导航到 gotgage.local/category/gages/ 时,它的 gages 部分没有被传递

RewriteEngine On
RewriteRule     ^/category/(.*?)/$  category.php?p=$1 [rn]

为了测试 category.php 文件只是转储 $_POST、$_GET 和 $_SERVER,这是我在打开页面时看到的。

GET
Array ( )
POST
Array ( ) 
SERVER
Array (
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,bzip2,sdch
    [HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_ACCEPT_LANGUAGE] => en-US,en
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,*,utf-8
    [HTTP_HOST] => gotgage.local
    [HTTP_CONNECTION] => Keep-Alive
    [PATH] => /usr/local/bin:/usr/bin:/bin
    [SERVER_SIGNATURE] =>  Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.2 with Suhosin-Patch Server at gotgage.local Port 80


    [SERVER_SOFTWARE] => Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.2 with Suhosin-Patch
    [SERVER_NAME] => gotgage.local
    [SERVER_ADDR] => 192.168.0.180
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 192.168.0.196
    [DOCUMENT_ROOT] => /home/gotgage/www/
    [SERVER_ADMIN] => [no address given]
    [SCRIPT_FILENAME] => /home/gotgage/www/category.php
    [REMOTE_PORT] => 56793
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /category/gages/
    [SCRIPT_NAME] => /category.php
    [PATH_INFO] => /gages/
    [PATH_TRANSLATED] => /home/gotgage/www/gages/
    [PHP_SELF] => /category.php/gages/
    [REQUEST_TIME] => 1241579116
    [argv] => Array
        (
        )

    [argc] => 0 )

从技术上讲,重定向是有效的,但是我没有从正确的页面获取下面正在转储的页面的 vars,但我的 vars 没有被传递。

4

3 回答 3

1

好吧,以下对我有用。看起来它不喜欢我的前导/[rn]抛出的语法错误。

RewriteEngine On
RewriteRule ^category/(.*?)/$ category.php?p=$1

注意:无论如何,它可能应该是[R,N],但同样,在这种情况下不需要它们。


RewriteRule Flags Documentation - 显示您可能不想使用Ror的原因N,但可能有一些我们不知道的东西。
RewriteRule 文档- 似乎表明/.htaccess RewriteRules 中没有前导(如果有 RewriteBase)。无论哪种方式,尝试使用和不使用 的规则/,对我来说,它只有在没有的情况下才有效。

于 2009-05-06T03:29:33.483 回答
0

我不完全确定这是问题所在,但将标志设置为“ [rn]”是无效的。多个标志应该用逗号分隔,所以如果你试图同时放置RN标志,它应该是[R,N]

于 2009-05-06T03:26:39.560 回答
0

有几件事有些不清楚:

1)与正则表达式部分的预期匹配是什么:

(.*?)

这有点多余——假设您只想匹配斜线之间的任何内容,以下内容就足够了:

(.*)

2)您设置了一个“rn”标志,这似乎无效。有效标志的示例是:

[R]
[N]
[R,N]

不过,我不确定您是否真的想同时使用 R 和 N。

于 2009-05-06T03:28:27.073 回答