创建用户友好的URL,无法正常工作

时间:2016-06-27 08:07:50

标签: php .htaccess mod-rewrite

我有一个名为example.com/profiles/?id=的网址(包含个人资料的任何ID /号码)。我想将此URL更改为用户友好的URL,如下所示:

example.com/profiles/2

我试过像这样重写.htaccess:

RewriteEngine On
RewriteRule ^/profiles/username/([\d]+)$ profiles.php?id=$1

我也试过这个:

RewriteEngine On
RewriteRule ^/profiles/([0-9]+)\.html /profiles/?id=$1

这两种方法都失败了。我已经有一个重写规则,文件扩展名已经终止。我不明白为什么我的友好网址无效。

2 个答案:

答案 0 :(得分:2)

在这两种情况下,您都无法匹配所需的模式。第一个规则之间有username,第二个规则仅与尾随.html匹配。并且模式在目录(.htaccess)上下文中使用时不包含前导斜杠/,请参阅RewriteRule

  

每个目录重写
   - ......
   - 删除的前缀始终以斜杠结尾,这意味着匹配对于从不具有前导斜杠的字符串。因此,带有^ /的模式在每个目录上下文中永远不会匹配。

此外,在这两个规则中,您将重写为不同的目标。

要将您所写的内容example.com/profiles/2example.com/profiles/?id=2相匹配,请使用

RewriteRule ^profiles/(\d+)$ /profiles/?id=$1 [L]

要反向重定向,您必须首先使用id捕获RewriteCond中的QUERY_STRING,然后在RewriteRule

中使用它
RewriteCond %{QUERY_STRING} id=(\d+)
RewriteRule ^profiles$ /profiles/%1 [R,L]

现在,当您同时使用这两个规则时,您将获得重定向循环。要防止此循环,请在开头插入

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

答案 1 :(得分:0)

URL 重写的最简单情况是重命名单个静态网页,这比上面的 B&Q 示例要容易得多。要使用 Apache 的 URL 重写功能,您需要在您网站的文档根目录(或不太常见的子目录中)创建或编辑 .htaccess 文件。

例如,如果您有一个名为 mypage 的关于 Ab3d4JK.htm 的网页,您可以将这些行添加到 .htaccess:

RewriteEngine On
RewriteRule   mypage.htm   Ab3d4JK.htm

现在,如果您访问 ,您实际上会看到网页 Ab3d4JK.htm。此外,您的浏览器将保持在 mypage.htm,因此访问者和搜索引擎永远不会知道您最初为该页面提供了一个如此神秘的名称。用户友好的 URL 不仅有益,还有助于提升您的 SEO。 URL 重写允许您将 URL 与资源完全分离。