我目前有一个整个网站上运行的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变量。
谢谢。
我目前有一个整个网站上运行的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变量。
谢谢。
假设您的参数总是被命名为cat_path
和product_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。
为了更好的搜索的搜索引擎优化有网址,像计算器 -
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
这听起来像一个完美的解决方案,因为我想坚持通过ID获取结果,而不是名称,我可以弄清楚如何将名字带入url(带有另一个GET变量),但我不知道如何实际进行重写。 ? – shane 2010-09-22 16:51:14
@shane,检查我的进一步更新部分 – 2010-09-27 06:51:50
上校弹片downvoted我,我99%肯定,甚至不敢写评论。哈哈 – 2010-12-18 17:28:41
我最近回答了一个类似的问题:
How can I use in .htaccess?
完整的解决方案,新的移动网址
您目前如何重写网址吗? – 2010-09-05 20:14:00
我不是目前重写所有:(我的网站是很好的搜索引擎优化,我只是想在URL中的产品名称略有提升它。感谢 – shane 2010-09-05 20:16:50
在什么格式你希望自己的网址是什么?显示的例子。你提到的这个格式是默认的PHP的Apache的一个,不需要重写规则为任意数量的GET变量。网址不会打破 – 2010-09-05 20:20:03