我在.htaccess
文件中有以下内容:
Options -Indexes
RewriteEngine on
RewriteBase /properties/
RewriteRule ^view/([0-9]+)$ view.php?id=$1 [QSA]
我想写一个“漂亮”的网址,例如http://example.com/properties/view/1到http://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 :(得分: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]+)$