简单的RewriteRule无法正常工作

时间:2011-12-14 18:05:16

标签: php .htaccess mod-rewrite

我在.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]令牌放在文件路径中。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

您只能使用以下代码重写以view开头的网址:

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

因为^意味着锚定到开头。

您可以将其更改为例如:

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