我想这个标题几乎可以说明一切。
我的原始网址如下:http://www.something.com/buy/index.php?p=025823
我正在使用的.htaccess看起来像这样:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\d+)*$ ./index.php?p=$1
生成的网址如下所示:http://www.something.com/buy/025823
我想最终得到一个网址:http://www.something.com/buy/Product Name/025823/
有人可以帮忙吗?特别是那个Gumbo家伙! LOL
答案 0 :(得分:0)
如果您可以控制生成到/buy/
页面的链接,只需在URL中插入产品名称(请记住URL的规则,例如不允许使用空格。通常,人们会替换{{ 1}}用于空格)。然后修改重写正则表达式以忽略URL的产品名称部分。
-
如果您无法控制链接,事情会变得更加复杂,因为您必须使用RewriteBase /
RewriteRule ^/buy/(.+)/(\d+)/$ ./index.php?p=$2
查找产品名称,然后执行重定向。我刚刚介绍的是similar question。我的answer to that question详细介绍了如何使用RewriteMap
,但我不认为该答案的详细信息适用于您的情况,因为使用静态定义的产品列表可能无法满足您的需求。
基本上,您需要实现一个可以从mod_rewrite的RewriteMap
规则调用的脚本。你需要这样的东西:
RewriteMap
其中namelookup.sh(或其他)以URL编码格式返回产品名称(在stdout上)。你肯定想看看mod_rewrite's documentation关于使用RewriteMap prodname pgm:/path/to/script/namelookup.sh
RewriteRule ^/buy/(\d+)/$ /buy/${prodname:$1}/$1/ [R=permanent]
的问题,特别是使用外部重写程序的RewriteMap
的最后一部分。