2011-12-14 54 views
0

,我有以下我.htaccess文件措辞:简单重写规则不工作,因为它应该

Options -Indexes 

RewriteEngine on 
RewriteBase /properties/ 
RewriteRule ^view/([0-9]+)$ view.php?id=$1 [QSA] 

我想写一个“漂亮”的网址像http://example.com/properties/view/1http://example.com/properties/view.php?id=1

RewriteRule正在将请求传递给我的view.php脚本,但它似乎没有执行查询字符串位。例如,如果我这样做print_r($_SERVER)我看到以下内容:

Array 
(
    ... 
    [DOCUMENT_ROOT] => /Users/Martin/Sites/[removed]/ 
    ... 
    [SCRIPT_FILENAME] => /Users/Martin/Sites/[removed]/properties/view.php 
    [REQUEST_METHOD] => GET 
    [QUERY_STRING] => 
    [REQUEST_URI] => /properties/view/1 
    [SCRIPT_NAME] => /properties/view.php 
    [PATH_INFO] => /1 
    [PATH_TRANSLATED] => /Users/Martin/Sites/[removed]/1 
    [PHP_SELF] => /properties/view.php/1 
    ... 
) 

为什么QUERY_STRING空?为什么我不能通过$_GET['id']访问“1”?

注意:显然我已将[removed]标记放置在文件路径中。

+0

的[重写规则的QS(http://wiki.apache.org/httpd/RewriteQueryString)似乎是正确的。你不应该,但是可以尝试`[NC,L,QSA]`然而。可能会显示一个`REDIRECT_QUERY_STRING` env变量吗?否则,你可能必须设置`RewriteLog`才能找到。 – mario 2011-12-14 18:16:21

+0

您确定没有其他规则先运行? – 2011-12-14 18:17:53

+0

我已经用我的`.htaccess`文件的全部内容更新了OP。 – 2011-12-14 18:24:25

回答

0

它看起来并不像我的重写规则正在工作。否则,我认为下面的值将被转换:

[REQUEST_URI] => /properties/view/1 
[PHP_SELF] => /properties/view.php/1 

如果重写规则进行工作,你的PHP脚本将看到重写的URI。

一些想法...

什么是您的RewriteCond?这是匹配吗?

我从来没有尝试过匹配部分路径,而没有尝试至少使用。*从头开始匹配。如果您尝试以下其中一项,会怎么样?

RewriteRule ^/?properties/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L] 
RewriteRule ^.*/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L] 
0

您只能重写,使用与view开头的URL:

^view/([0-9]+)$ 

因为^锚定到开始。

你可以将其更改为例如:

^properties/view/([0-9]+)$