2009-11-17 129 views
1

我有以下格式的URL: domain/product.php?name=product a重写包含URL空间

现在我需要重写这: domain/product a(包括字的空间),如: http://www.directline-holidays.co.uk/Costa Blanca

怎么办我这样做?我走到这一步,最近的结果如下: domain/p/product-a

用下面的代码在.htaccess

RewriteEngine On 
RewriteRule ^p/([^/]*)/$ destination.php?name=$1 

我甚至不能使用名称不带“ - ”。我需要产品名称,就像它在数据库中一样。这可能吗?

回答

3

这应该工作:它会简单地将/ p /目录后的URL字符串的其余部分提供给字符串的末尾,在您的情况下,该字符串应该是URL的末尾,是正确的?

RewriteRule ^p/(.*)$ destination.php?name=$1 

对于不是产品页面,如果你知道他们会在PHP文件扩展名,你可以筛选规则与下列这些页面结束的页面:

RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$ 
RewriteRule ^([^\.php]+)$ destination.php?name=$1 

编辑:通过增加对的RewriteCond destination.php

+0

我已经得到它的工作,问题是,我只想要产品域名后的名称。没有/ p – Kunal 2009-11-17 19:26:11

+0

我看到...所以应该是:RewriteRule ^(。*)$ destination.php?name = $ 1 – jaywon 2009-11-17 19:30:07

+0

它将所有内容重定向到destination.php页面...需要检查以便它不会重定向.php页面,如域/ index.php,域名/ contact-us.php等页面到目标页面...事件只有键入域/正在重定向到destination.php页面... ...吗? – Kunal 2009-11-17 19:41:00

2

附加 “%20” 的URL,如:

http://www.directline-holidays.co.uk/Costa%20Blanca 

在十六进制基座20是用于空间的ASCII数字。

编辑:

除了powtac的评论:

使用JS encodeURIComponent方法()函数来编码应在URL中使用的值: http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

+2

如果您使用PHP创建链接添加链接周围的urlencode(),它会自动添加%20和其他东西。 – powtac 2009-11-17 18:42:41

+0

谢谢,我已经解决了它。现在我需要的是重写规则,这将允许我只使用产品名称来创建url。请帮助。 – Kunal 2009-11-17 18:55:57

+0

@Kunal:尝试以下REGEXP: ^ [^ /] $ – Dor 2009-11-17 19:05:08

1

试试这个规则修正了无限循环的情况..

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule product-name-(.*)\.htm$ product.php?name=$1 

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule product/name/(.*)/ product.php?name=$1 
RewriteRule product/name/(.*) product.php?name=$1 
+0

我更喜欢使用我写的第一个。我根据我使用的服务器有第二个问题。 – Luis 2009-11-17 20:14:58

0

你的意思是,如果目的地是一个PHP文件,不rewirte它,否则重写任何事情destination.php?如果是的话,这应该工作

RewriteEngine On 
RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule ^(.*)$ destination.php?name=$1