3

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

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

上面的 URL 是未重写的示例。我只是想让它们

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

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

.htaccess中,我只想能够通过上面的干净 URL 访问他们。之后,我将检查脚本顶部的 URL,如果它不干净,那么使用我编写的函数将其重定向到干净的 URL(通过使用 preg_match 和 preg_split 获取值并使用 header 函数重定向)。

到目前为止,我已经尝试过这个规则(这对查看专辑不起作用):

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

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

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

最后,这个(帮助我通过类似的 URL 查看照片example.com/fotograf/10/?fid=5):

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

但我不想在 URL 中看到任何问号或 & 符号。

不知何故,我需要检查哪些(已)设置并相应地重定向,但我只是不知道如何实现这一点。

我怎样才能做到这一点?

提前致谢。

4

2 回答 2

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 页面中的 URL...

于 2012-11-18T12:50:33.430 回答
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
于 2013-12-18T03:33:30.670 回答