使用.htaccess重写带有查询字符串的URL

时间:2012-05-19 15:27:11

标签: php .htaccess query-string

我有一个页面是www.example.com/page_name.php?var1=dynamic_var1&var2=dynamic_var2

我想使用.htaccess文件使其看起来像这样 www.example.com/page_name/dynamic_var1/dynamic_var2

到目前为止我已尝试过这个

RewriteRule ^page_name/(.*)/(.*)$ page_name.php?var1=$1&var2=$2 [NC]

问题是当它转到数据库时就像这样

SELECT * FROM table_name WHERE id=dynamic_var1/dynamic_var2.php/dynamic_var1 LIMIT 1

我也试过这个

RewriteRule page_name/(\w+)/(\w+) page_name.php?var=$1&var2=$2

它正在加载页面但没有任何图片或css文件或任何东西,当我使用firebug它说它无法加载给定的URL。

当我尝试这个时

RewriteRule ^page_name/(\w+)/(\w+)$ page_name.php?var=$1&var2=$2

它给了我内部服务器错误

提前致谢,

1 个答案:

答案 0 :(得分:1)

请勿尝试从.htaccess文件中拆分网址。为什么不尝试将整个查询字符串传递给您想要的index.php或任何其他脚本,并在那里解析请求...

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

更简单的方法是简单地将所有请求重定向到index.php文件,该文件执行类似的操作 -

index.php -

给定http://yourdomain.com/user/123

$originalURL = $_GET['url'];
$URLParts = explode('/',$originalURL);

现在你有$URLParts

的内部
Array (
 'user',
 '123'
)

现在,您可以轻松地将这些值放在SQL查询中。

注意以进行SQL注入!始终使用mysql_real_escape_string()并确保清理任何传入的数据......