2010-09-05 128 views
0

我目前有一个整个网站上运行的PHP & GET变量。.htaccess url重写与php

我的链接看起来像这样目前

http://www.example.co.uk/brochure.php?cat_path=24 

而且偶尔它在URL中的第二个变量...

其实我想我的网址看起来像这样: http://www.example.co.uk/Concrete_Fence_Posts

所以我的问题很简单,我怎么去重写URL而不会打破我的GET变量。

谢谢。

+0

您目前如何重写网址吗? – 2010-09-05 20:14:00

+0

我不是目前重写所有:(我的网站是很好的搜索引擎优化,我只是想在URL中的产品名称略有提升它。感谢 – shane 2010-09-05 20:16:50

+0

在什么格式你希望自己的网址是什么?显示的例子。你提到的这个格式是默认的PHP的Apache的一个,不需要重写规则为任意数量的GET变量。网址不会打破 – 2010-09-05 20:20:03

回答

2

假设您的参数总是被命名为cat_pathproduct_id(如果存在的话),你可以做这样的事情:

RewriteRule ^([^/]+)/([\d+])$   $1.php?cat_path=$2 
RewriteRule ^([^/]+)/([\d+])/([\d+])$ $1.php?cat_path=$2&product_id=$3 

您的网址然后将这些格式之一:

pagename/cat_path 
pagename/cat_path/product_id 

例如:

http://www.bentinckfencing.co.uk/brochure/24 
http://www.bentinckfencing.co.uk/product/35/54 

编辑:我看到你想在URL中使用产品名称。在这种情况下,您的PHP脚本需要能够将名称作为参数并查找ID。您应该继续直接接受该ID,以免破坏现有链接。然后你重写规则是这样的:

RewriteRule ^([^.]+)$   brochure.php?name=$1 

而且http://www.bentinckfencing.co.uk/Concrete_Fence_Posts将改写为http://www.bentinckfencing.co.uk/brochure.php?name=Concrete_Fence_Posts

-1

为了更好的搜索的搜索引擎优化有网址,像计算器 -

http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

有像搜索引擎不存储无论是在网址中?后。 这个结尾concrete-fence-posts也可以帮助用户在浏览器地址栏中识别页面。但是,如果在URL中未使用?,则无法允许某些特殊字符。字符如/,%将破坏URL并且\,#,+将不会出现。

更新

你想从传递到名路过ID完全动?我不确定这会有多好,但我听说有几个知名网站有这样的网址。但是,根据您的项目(您有多少个模块),您可能需要做很多更改。但是,stackoverflow样式的URL会保留基于ID的项目提取。

进一步更新
你可以试试这个重写规则必须在URL(计算器风格)两个编号和名称: -

RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-z0-9\-\_]+)/?$ $1.php?cat_path=$1&cat_name=$2 

我没有,虽然进行了测试。

另一件重要的事情是,我看到您的代码直接输入brochure.php,并且没有在所有模块的情况下执行的公用文件(公共控制器)。这种方法可能有许多缺点,特别是如果你的应用程序是大中型应用程序。它始终是更好地在这个index.php文件来执行共同index.php文件,包括所需的brochure.php文件中有这样您就可以执行所有这些公用逻辑(需要所有的模块)。我有一个共同的index.php文件和下面的重写规则做同样的: -

############To remove display of "index.php" from URL 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php [L,QSA] 
#################################################end of hiding index.php 

RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-zA-Z0-9\-\_]+)/?$ index.php?a=$1&b=$2&c=$3 

注: -的重写规则第一块隐藏URL中的index.php文件和访问者不知道我的应用程序在PHP中运行。

最后我的网址是这样的: -

http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

希望这有助于
Sandeepan

+0

这听起来像一个完美的解决方案,因为我想坚持通过ID获取结果,而不是名称,我可以弄清楚如何将名字带入url(带有另一个GET变量),但我不知道如何实际进行重写。 ? – shane 2010-09-22 16:51:14

+0

@shane,检查我的进一步更新部分 – 2010-09-27 06:51:50

+0

上校弹片downvoted我,我99%肯定,甚至不敢写评论。哈哈 – 2010-12-18 17:28:41