【问题标题】:.htaccess mod_rewrite not working for friendly URL's.htaccess mod_rewrite 不适用于友好的 URL
【发布时间】:2013-10-11 16:37:43
【问题描述】:

我已经进行了多次搜索并遵循教程,但我似乎无法让以下工作。我想使用 .htaccess mod_rewrite 创建 SEO 友好的 URL。我的示例将用于显示新闻故事。当前的url结构是这样的:

http://www.website.com/news/details/?newsID=40

我想把它改成这样:

http://www.website.com/news/name-of-news-article/

这是我目前用于重写的 .htaccess 文件:

RewriteEngine on
RewriteRule ^news/([^/]+)/?$ /news/details/?newsID=$1 [L]

只要在 .htaccess 文件中添加这个,URL 就不会发生任何事情,它只是保持原来的样子。我知道该站点可以读取 .htaccess 文件。

我猜要在其中获取实际的文章名称,我必须传递一个包含名称的参数,但即使在当前示例中,也没有发生任何事情。任何援助将不胜感激!谢谢。

【问题讨论】:

  • 您必须在应用程序中处理这种类型的重写,因为 url 存根或友好 url 对 apache 不可用。此外,您拥有的 RewriteRule 正在从其他东西重写到当前的 URL 结构。阅读这份备忘单cs.tut.fi/~jkorpela/perl/regexp.html
  • 作为后续,^ 表示字符串的开头,因此您不能将其包含在 [] 中。您正在尝试匹配一个或多个 ^/ 实例,这只是您的域之后的第一个斜杠。该规则实际上按预期工作,只是没有匹配,所以它什么都不做。

标签: php .htaccess mod-rewrite


【解决方案1】:

从匹配模式中删除前导斜杠。

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/news/details/ [NC]
RewriteRule ^news/([^/]+)/?$ /news/details/?newsID=$1 [L]

原因: URI 中 .htaccess 内的前导斜杠不匹配。

了解更多信息:Apache mod_rewrite Introduction

PS:虽然请记住,重写后的 URI 将是 /news/details/?newsID=name-of-news-article

编辑

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+test\.htm[?\s?] [NC]
RewriteRule ^ /hello? [R=302,L]

【讨论】:

  • 我按照您的建议删除了斜线,但现在网站出错了。如果我去website.com/news(这是列出所有新闻文章的默认页面)或website.com/news/details/?newsID=40,我会得到一个 500 Internal Server Error 显示
  • http://www.website.com/news/ 不会受到上述规则的影响,因为它期望在/news/ 之后出现[^/]+
  • @anubhava OP 正在尝试将数字 ID 重写为友好 URL。 .htaccess 文件从哪里获取字符串?
  • 上面的代码仍然没有做任何事情。其实现在/news/页面已经找不到了,详情页还是显示原来的样子。
  • @user2762748 这是 .htaccess 中的唯一代码吗?如果没有发布您的完整 .htaccess
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多