重写将简单正则表达式重定向到基本文件

时间:2010-06-27 03:16:53

标签: regex .htaccess mod-rewrite apache2

我正在尝试执行基本的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和其他更改,但没有任何工作。知道我哪里出错了?

1 个答案:

答案 0 :(得分:3)

问题是文件index.php与htaccess在同一目录中,并由重写包含和处理。尝试添加重写条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

此外,您传递给id参数的输入非常不安全。假设您使用数字ID,您可能希望使用[0-9]而不是.来确保只传递数字。如果它们是字母数字,您仍然希望使用类似:[a-zA-Z0-9\-_]

的内容