2014-02-20 41 views
0

是否有可能有像www.domain.com/admin/mail-sent这样的网址,其实际上会是www.domain.com/admin/mail.php?category=mail&folder=sentPHP URL重写两个参数

我有这个成立于我的.htaccess:

AddDefaultCharset UTF-8 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 

RewriteRule ^([a-zA-Z0-9-]+)$ mail.php?category=$1folder=$2 

..我不知道这是否是正确的。我已经试过只是作为URL的文件夹是好的,但我真的想要的网址是/mail-sent而不是仅仅/sent

这甚至可能吗?

有一个美好的一天:)

回答

3

是的,这就是:第一破折号后

RewriteRule ^admin/([^-]+)-([^/]+)/?$ mail.php?category=$1&folder=$2 [L,NC] 

([^-]+)东西不是一个破折号

([^/]+)什么不是/

你可以也可以更严格地这样做:

RewriteRule ^admin/(mail)-(sent)/?$ mail.php?category=$1&folder=$2 [L,NC] 
+0

+1对于很好的解释 – anubhava

+0

是的,这完美的作品。但是,如果我例如想要用这些参数设置查询,那么它会失败。我的查询如下所示:'$ db-> query(“SELECT * FROM mail WHERE category ='”。$ _ GET ['category']。''AND folder ='“。$ _ GET ['folder']。”' “);'那么它不会返回结果。但是,如果我只使用一个参数,比如'folder = inbox',那么它工作得很好。或者,如果我在查询中放入'category ='mail'AND folder ='inbox'',那么它也可以正常工作。 –

+0

@ dinkode.dk规则缺少'&'来分隔参数,因为它是部分您的帖子的副本。现在检查。 – Prix

0

当然,这是可能的。只需重写你的正则表达式,以防备-。用括号可以定义匹配组:

RewriteRule ^([a-zA-Z0-9]+)\-([a-zA-Z0-9]+)$ mail.php?category=$1folder=$2 

$ 1表示第一个括号,第二个表示为第二个。