2012-01-15 34 views
0

我在几个小时看着mod_rewriting上的各种内容,但我尝试自己的任何东西似乎从来没有工作。我期望的是我可以给你们的URL模型,并得到一个有效的规则和该规则的细分作为回报(我对regex非常熟悉)。这样我也可以适应未来的需求。(基本)Mod_rewrite分解

结构为: domain.com/contents/page.php?id=123&u=page-slug

我要的是为用户键入: domain.com/page-slug 并成功地重定向到问题的网页。

从我读过的,这应该不会影响PHP GET的 - 这是正确的吗?即使该ID实际上不在地址栏中(obv。问题,但我对此完全陌生)?令人惊讶的是,什么教程遗漏了...

在此先感谢!

+0

如何确定的值ID参数? – 2012-01-15 16:13:30

+0

这些ID是在页面被创建并存储在数据库中时自动生成的。然后页面模板将获取该url,获取该id,并显示为该id存储的内容。工作正常,但它非常不方便用户使用。 – Eamonn 2012-01-15 16:20:50

回答

1

如果ID是必需的,那么它将需要存在于漂亮的网址,即像domain.com/page-slug/page-id

要重写这page.php以下内容添加到您的.htaccess在domain.com根目录下面

RewriteEngine on 
RewriteBase/

#if not a file or a directory 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# rewrite requests of the form domain.com/page-slug/123 
RewriteRule ^([-a-zA-Z0-9]+)/([0-9]+)/?$ contents/page.php?id=$2&u=$1 [NC,L,QSA] 

如果您想了解更多信息请参阅本list of .htaccess and mod_rewrite resources on the web

+0

谢谢。仍然没有工作。我很困惑 - 我在Apache服务器上使用CPanel(因此模块必须打开),.htaccess文件位于根目录中,并且我已经非常熟悉语法来跟踪发生的事情,但它仍然是静止的将无法工作。 我试图从现在的域的子目录中,只是为了避免与另一个安装搞乱。所以这个结构现在会有更多的目录('domain.com/dir/contents/page ...')。我已将.htaccess文件移至子目录,但仍然没有任何结果。 – Eamonn 2012-01-15 16:50:44

+0

虽然我们正在谈论它 - 如果id是必要的,那么WordPress(作为例子)如何工作它是'漂亮的固定链接'?只是基于slug而不是id搜索数据库? – Eamonn 2012-01-15 16:58:01

+0

为了澄清,我目前的结构是'domain.com/dir/contents/page.php?id = 123&u = page-slug'。现在我将输入'domain.com/dir/id/page-slug' – Eamonn 2012-01-15 17:10:23

0

从我读到的,这应该不会影响PHP GET的 - 这是正确的吗?即使该ID实际上不在地址栏中(obv。问题,但我对此完全陌生)?

如果url中没有id,PHP GET将不会得到一个id。但是在你的代码中,它会起作用。因为你在htaccess的设定一个固定的ID,该ID将永远是123


为什么它似乎从来没有工作?给你一个错误,apache错误,或者...? 你有没有添加mod_rewrite模块到httpd.conf?如果没有:

浏览到你的httpd.conf文件并在你的编辑器中打开它。查找该文件中:

#LoadModule rewrite_module modules/mod_rewrite.so 

在队伍的前面取出#,保存文件并重新启动Apache。


.htaccess文件应该是这样的:

RewriteEngine On 
RewriteBase/

RewriteRule ^(\d*?)/(.*?)$ page.php?id=$1&u=$2 

然后更换domain.com/id/page-slug到domain.com/page.php?id=id & U =页-lug

+0

该ID不会是123,那只是填充。每个服务页面的id会有所不同。但是你说GETs不会工作呢? ...并打开模块。我相信这只是一个不好的写作问题,因为我得到的是找不到页面错误 – Eamonn 2012-01-15 15:50:53

+0

@Eamonn然后你需要在URL中添加id。像'domain.com/id/page-slug'这样的东西# – 2012-01-15 16:23:18

+0

@Eamonn我加了你应该尝试的代码。 – 2012-01-15 16:24:22