无法重写 URL Linux 服务器(URL 重写)
Unable to Rewrite URL Linux server ( URL rewriting )
主要url
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=
RewriteRule artwork_detail/artid/(.*) artwork_detail.php?artid=
预期输出
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
您的规则将您的 预期输出 重写为您的 main url。每个规则只做 一个 事情,它将 "first param" 重写为 "second param",其中第一个是匹配请求的正则表达式。它不会对规则的输出应该做什么做任何事情,除非你有一个规则要重写它。
此外,重写都是在服务器内部进行的,浏览器完全不知道 URL 正在重写。但是,外部重定向告诉浏览器 "your last request is somewhere else, go here in order to get to it"。听起来您希望 main URL 从外部重定向到您预期的输出,而不是在内部重写(尽管您需要它们在内部将它们 back 重写到 main 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= [L]
主要url
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=
RewriteRule artwork_detail/artid/(.*) artwork_detail.php?artid=
预期输出
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
您的规则将您的 预期输出 重写为您的 main url。每个规则只做 一个 事情,它将 "first param" 重写为 "second param",其中第一个是匹配请求的正则表达式。它不会对规则的输出应该做什么做任何事情,除非你有一个规则要重写它。
此外,重写都是在服务器内部进行的,浏览器完全不知道 URL 正在重写。但是,外部重定向告诉浏览器 "your last request is somewhere else, go here in order to get to it"。听起来您希望 main URL 从外部重定向到您预期的输出,而不是在内部重写(尽管您需要它们在内部将它们 back 重写到 main 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= [L]