0

我正在使用 htaccess 重写我的 url 我的原始 url 是

http://www.example.com/products/product_detail.php?url=pro-name

我想要的网址会像这样

http://www.example.com/products/pro-name

但我已经部分完成了这个网址

 http://www.example.com/products/product_detai/pro-name

使用这个 .htaccess 代码

RewriteRule product_detail/url/(.*)/ product_detail.php?url=$1
RewriteRule /(.*) product_detail.php?url=$1

在这里我不知道如何获得我想要的网址。请帮助任何人获得所需的网址。谢谢

4

2 回答 2

1

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(products)/product_detail.php\?url=([^\s]+) [NC]
RewriteRule ^ /%1/%2? [R=302,L]

RewriteRule ^(products)/(.+?)/?$ /$1/product_detail.php?url=$2 [L,NC,QSA]
于 2013-07-22T11:10:16.647 回答
0
#Assuming the correct RewriteBase is used...

#Redirect the client to the fancy url
RewriteCond %{QUERY_STRING} ^url=(.*)$
RewriteRule ^product_detail\.php$ %1? [R,L]

#Rewrite the url internally and stop rewriting
#to prevent a loop
RewriteRule ^(.*)$ product_detail.php?url=$1 [END]

在此代码中,您首先将客户端重定向到您希望在地址栏中显示的 url。%1匹配 RewriteCond 的第一个捕获组。尾随?清除查询字符串。第二条规则在内部重写 url,以便服务器可以实际生成输出而不是 404 错误。END 标志(可从 apache 2.3.9 及更高版本获得;文档)将完全停止重写 url)。这是为了防止 url 不断被重写的永无止境的循环。(文档

编辑: 2.3.9 以下的 apache 版本没有 END 标志。为了防止循环,您需要解决这个问题。您可以使用例如:

#Assuming the correct RewriteBase is used...

#Redirect the client to the fancy url
RewriteCond %{QUERY_STRING} !redirect=true
RewriteCond %{QUERY_STRING} ^url=(.*)$
RewriteRule ^product_detail\.php$ %1? [R,L]

#Rewrite the url internally and stop rewriting
#to prevent a loop
RewriteRule ^(.*)$ product_detail.php?url=$1&redirect=true [L]
于 2013-07-22T10:29:49.337 回答