使用.htaccess处理两个查询字符串

时间:2012-11-18 11:28:11

标签: .htaccess mod-rewrite url-rewriting query-string clean-urls

我正在尝试为具有两个查询字符串参数的页面重写网址。根据这些参数值(设置与否),我在页面上显示不同的内容。

example.com/fotograf.php?aid=10
example.com/fotograf.php?aid=10&fid=5

以上网址是不重写的网址的示例。我只是想让他们这样

example.com/fotograf/10/
example.com/fotograf/10/5/

第一个URL链接到包含照片的相册,第二个链接到该相册中的照片。

.htaccess中,我只想通过上面的干净网址与他们联系。在那之后,我将检查脚本顶部的URL,如果它不干净,那么使用我编写的函数,我将其重定向到清理它(通过使用preg_match和preg_split获取值并使用头函数重定向)。

到目前为止,我已尝试过此规则(无法查看相册):

RewriteRule ^fotograf/([0-9-/]+)/([0-9]+)/?$ fotograf.php?aid=$1&fid=$2 [L]

然后,这(总是重定向到专辑):

RewriteRule ^fotograf/([0-9-/]+)/?$ fotograf.php?aid=$1 [L]

最后,这(帮助我通过像example.com/fotograf/10/?fid=5这样的网址查看照片):

RewriteCond %{QUERY_STRING} ^fid=(.*)$
RewriteRule ^fotograf/(.*)/$ fotograf.php?aid=$1&fid=%1

但我不希望在网址中看到任何问号或&符号。

不知何故,我需要检查哪个(哪些)设置并重定向,但我不知道如何实现这个目标。

我该怎么做?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您需要让应用程序生成您想要的URL,所以形式为:

example.com/fotograf/10/
example.com/fotograf/10/5/

并且重写规则将确保,它将到达你的php:

RewriteEngine On

RewriteRule ^fotograf/([0-9]+)/([0-9]+)/?$ fotograf.php?aid=$1&fid=$2

RewriteRule ^fotograf/([0-9]+)/?$ fotograf.php?aid=$1

mod_rewrite无法重写HTML网页中的网址...

答案 1 :(得分:1)

# this works 
  RewriteEngine On
  RewriteBase /yourdir/yourfolder/

# only 1 in root 
# RewriteRule ^([a-zA-Z0-9-]+)$ index.php?act=$1[L,QSA]

  RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ members.php?act=$1&opts=$2

  RewriteRule ^([a-zA-Z0-9-]+)/?$ members.php?act=$1

 #   Your url would be:
 #   example of http://localhost/yourdir/yourfolder/members.php?act=beer
 #   http://localhost/yourdir/yourfolder/beer
 # or 
 # http://localhost/yourdir/yourfolder/members.php?act=beer&ops=morebeer
 # http://localhost/yourdir/yourfolder/beer/morebeer