2017-08-17 120 views
0

傍晚的家伙,.htaccess产品ID的改写

我一直在试图让产品ID和名称的mod重写工作,但我没有运气。我试图在这里搜索,但没有明确的解释。

这是位于http://www.peakwebdesigns.co.uk/ecommerce/store

例URL我的电子商务演示:http://www.peakwebdesigns.co.uk/ecommerce/product_page?id=3name=Bed

我想:http://www.peakwebdesigns.co.uk/ecommerce/product_page?id=3name=Bed

http://www.peakwebdesigns.co.uk/ecommerce/3-Bed

我的URL结构如下:

<a href='product_page?id=<?php echo $product_array[$key]["product_id"].'name='.$product_array[$key]["product_name"]; ?>' id='product_links'><?php echo '<div id="product_image"><img src="images/'. $product_array[$key]["image"] . '"></div>' ?> \t </a>

这是我目前在我的.htaccess(我知道第几码项工作,因为我已删除.php然后从文件中的.html):

RewriteEngine On 
 

 
RewriteCond %{REQUEST_FILENAME} !-f 
 

 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
 

 
RewriteCond %{REQUEST_FILENAME} !-f 
 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 
 

 
RewriteRule ^([0-9])-([A-Z]+)$ product_page?id=$1name=$2 [NC,L]

问题:由于我的/电子商务/包含在我的网址中,以上设置是否正确?

如果不是,任何人都可以帮助我正确书写这个吗?

谢谢。 Stan。

+0

“我试过在这里搜索,但没有明确的解释。”嗯,当然有,但更重要的是:为什么你会在SO上搜索答案而不是阅读你使用的工具的文档? Apache http服务器模块的文档质量非常高,并附带非常好的示例... – arkascha

+0

针对您在问题中提出的特定问题:您是否介意在您放置的服务器端文件系统层次结构中添加问题_where_你使用的动态配置文件? – arkascha

+0

我在Google/YouTube/SO上进行了研究,并试验了各种代码。我大胆的问题是我认为正在影响它的工作原理。这就是为什么我在SO这里问社区。我在SO上找到的每个答案都有如何编写代码的变体.EDIT:我已经将.htaccess文件放在/和/ ecommerce/ –

回答

0

我用下面的规则根据所述参数来调整网址:

重写规则^电子商务/产品/(.*)$ ./ecommerce/product?id=$1 [L,NC]

RewriteRule^ecommerce/category /(.*)$ ./ecommerce/category_page?category_name=$1 [L,NC]

0

有许多可能的设置,我希望这是一个最有可能让你感觉(你愿意给你的情况的信息非常少):

最好是将主机内部的这种重写规则你的http服务器的配置:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/ecommerce/(\d+)-(\w+)/?$ /ecommerce/product_page?id=$1name=$2 [END] 

或者,你也可以使用动态配置文件。那么我会建议该文件放置ecommerce文件夹中,并用类似的东西开始:

RewriteEngine on 
RewriteBase /ecommerce 
RewriteRule ^/?(\d+)-(\w+)/?$ product_page?id=$1name=$2 [END] 

对于这个工作,你需要的拳头启用动态配置文件的解释,我们来看一看在AllowOverride指令中该文件。

注意:如果您收到上述规则的http状态500(内部服务器错误),则很可能是您运行的是旧版本的apache http服务器。在这种情况下,请尝试用[L]标志替换[END]标志。

此外,为了精确,我想指出,您需要格式化正确发送的链接。你不能保持代码创建的链接不变,并期望重写模块神奇地改变你发送的文字链接。


而且一般提示:你应该总是喜欢在http服务器(虚拟)主机配置,而不是使用动态配置文件(.htaccess风格文件)里这样的规则。这些文件出了名的错误,很难调试,他们真的放慢了服务器。只有当你无法控制主机配置(读取:真正便宜的主机服务提供商)或者如果你有一个依赖编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。

+0

感谢您花时间写这篇文章。 我已经更新了.htaccess,并且我会读到使用http主机配置文件,当然。 我更新了我的href id-name(使用php变量),但它是404'ing,我也用过/ 3床,它仍然无法正常工作。有任何想法吗? –

+0

如果任何人都可以提供帮助,仍然在努力。 重写规则是 RewriteBase /电子商务 重写规则^ /?(\ d +)/?$ product_page?编号= $ 1 [END] 试图改变 http://www.peakwebdesigns.co.uk/ecommerce/ product_page?id = 1 至 http://www.peakwebdesigns.co.uk/ecommerce/product/1 **我希望在/ URL中保留/ ecommerce / –