(基本)Mod_rewrite细分

时间:2012-01-15 15:40:36

标签: .htaccess mod-rewrite

我几个小时都在寻找各种关于mod_rewriting的东西,但我尝试过的任何东西似乎都没有用。我希望的是,我可以给你们URL模型,并获得一个工作规则和该规则的细分作为回报(我对正则表达式相当熟悉)。这样我也可以适应未来的要求。

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

我想要的是用户输入: domain.com/page-slug 并成功重定向到相关页面。

根据我的阅读,这不应该影响PHP GET - 这是正确的吗?即使id实际上并不在地址栏中(obv。问题,但我对此还是全新的)?教程遗漏的内容令人惊讶......

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果ID是必要的,那么它将需要出现在漂亮的URL中,例如domain.com/page-slug/page-id

要将此内容重写为page.php,请将以下内容添加到domain.com根目录中的.htaccess中,如下所示

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

答案 1 :(得分: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=page-slug