2010-07-28 79 views
0

我猜标题几乎说明了一切。试图获得产品名称和产品ID在最后和之间的斜线与网址?p =

我原来的URL看起来像: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 

结果URL看起来像:http://www.something.com/buy/025823

我想结束网址如下:http://www.something.com/buy/Product Name/025823/

任何人都可以帮忙吗?特别是那个Gumbo家伙! LOL

回答

0

如果您可以控制生成到您的/buy/页面的链接,只需将该产品名称插入到URL中(请记住URL的规则,例如不允许空格)通常,人们用-代替空格) 。然后修改您的重写正则表达式以忽略您的URL的产品名称部分。

RewriteBase/
RewriteRule ^/buy/(.+)/(\d+)/$ ./index.php?p=$2 

如果你无法控制的链接,事情变得更加复杂,因为你必须使用RewriteMap查找的产品名称,然后执行重定向。我最近报道的是similar question。我的answer to that question详细介绍了使用RewriteMap,但我认为该答案的细节不适用于您的情况,因为使用静态定义的产品列表可能无法满足您的需求。

基本上,您需要实现一个可以从mod_rewrite的RewriteMap规则调用的脚本。你会需要这样的东西:

RewriteMap prodname pgm:/path/to/script/namelookup.sh 
RewriteRule ^/buy/(\d+)/$ /buy/${prodname:$1}/$1/ [R=permanent] 

凡namelookup.sh(或其他)的URL编码的格式返回产品的名称(在标准输出上)。您一定想看看mod_rewrite's documentation关于使用RewriteMap,特别是关于使用外部重写程序的RewriteMap Directive的最后一部分。

+0

太棒了!乔什,你达人!我一直在尝试两天来获得这个,忽略了其他客户的工作。这就是我最终的结果。由于我的.htaccess位于buy目录中,因此稍作修改。刚开箱就工作得很好。选项+ FollowSymLinks RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^(。+)/(\ d +)/ $ ./index.php?p=$2再次感谢! – Fisherman 2010-07-28 20:08:23

+0

看起来像评论不允许适当的段落。抱歉。 – Fisherman 2010-07-28 20:09:25

+0

@Douglas:我很高兴能够帮到你。由于此答案适合您,请记得点击上面的绿色复选标记,将此答案标记为已接受,并且您的问题已解决。 – josh3736 2010-07-28 21:52:41