无法重写URL Linux服务器(URL重写)

时间:2015-01-14 02:40:20

标签: apache .htaccess

主网址

 http://wwww.domain-name.com/artwork_detail.php?artid=F3A5ACFA-6B12-D7A6-6637-03AC0F77E3E0

的.htaccess

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule artwork_detail/artid/(.*)/ artwork_detail.php?artid=$1
    RewriteRule artwork_detail/artid/(.*) artwork_detail.php?artid=$1   

预期输出

http://wwww.domain-name.com//artwork_detail/artid/F3A5ACFA-6B12-D7A6-6637-03AC0F77E3E0/

当前输出

 http://wwww.domain-name.com/artwork_detail.php?artid=F3A5ACFA-6B12-D7A6-6637-03AC0F77E3E0

1 个答案:

答案 0 :(得分:1)

您已将预期输出重写为主网址的规则。每个规则只执行一个事物,它将“第一个参数”重写为“第二个参数”,其中第一个是与请求匹配的正则表达式。它没有对规则的输出应该做什么做什么,除非你有一个规则要重写它。

此外,重写都是服务器内部的,浏览器完全不知道正在重写URL。但是,外部重定向会告诉浏览器“您的上一个请求位于其他地方,请此处以便获取它”。听起来你希望你的主URL被外部重定向到你期望的输出,而不是在内部重写(虽然你需要它们在内部重写 back 到主URL以便你的任何一个页面工作)。

所以请改用:

Options +FollowSymLinks -Multiviews
RewriteEngine on

RewriteCond %{THE_REQUEST} \ /+artwork_detail\.php\?artid=([A-Z0-9-]+)
RewriteRule ^ /artwork_detail/artid/%1/? [L,R]

RewriteRule ^artwork_detail/artid/([A-Z0-9-]+)/? /artwork_detail.php?artid=$1 [L]
相关问题