尝试将产品名称和产品ID放入url,最后使用斜杠,而不使用?p =

时间:2010-07-28 19:19:00

标签: php .htaccess url-rewriting

我想这个标题几乎可以说明一切。

我的原始网址如下: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

1 个答案:

答案 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的最后一部分。