我正在尝试执行基本的mod_rewrite clean URL技巧,其中/category/item
重写为/category/index.php?id=item
。在/category
目录中,我在.htaccess文件中有这个:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /category/
RewriteRule ^(.+)$ index.php?id=$1 [L]
它将请求发送到index.php
脚本就好了,但是我没有在id变量中找到“item”,而是获得了“index.php”。也就是说,/category/item
似乎正在重写为/category/index.php?id=index.php
。
我尝试了无穷无尽的变化,不同/没有RewriteBase和其他更改,但没有任何工作。知道我哪里出错了?
答案 0 :(得分:3)
问题是文件index.php与htaccess在同一目录中,并由重写包含和处理。尝试添加重写条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
此外,您传递给id参数的输入非常不安全。假设您使用数字ID,您可能希望使用[0-9]
而不是.
来确保只传递数字。如果它们是字母数字,您仍然希望使用类似:[a-zA-Z0-9\-_]
。