URL:将“/news.php?id=1”转换为“/ news / 1 /”

时间:2013-07-25 17:45:11

标签: apache .htaccess

我正在尝试为我的网站制作更清晰的网址。我已经发现很多关于删除URL中的文件扩展名的问题并设法使其正常工作。我想通过将 http://www.site.com/news.php?id=1 等网址转换为 http://www.site.com/news/1/ 来更进一步。我找不到这个具体问题的答案,所以我在这里问。我怎么能像这样实现URL?

重写我在htaccess中已有的规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)?$ $1.php

1 个答案:

答案 0 :(得分:0)

有很多问题可以回答你的问题。你有两件事要做:

  1. 将丑陋的网址重定向到花哨的网址,以便用户看到花哨的网址
  2. 在内部将重要的URL重写为丑陋的URL,以便服务器可以实际执行它。
  3. 您可以找到mod_rewrite here的文档。此解决方案使用[END]标志,该标志仅在Apache 2.3.9及更高版本中可用。您可以找到文档here。第一条规则中的尾随?会丢弃查询字符串。

    #Redirect ugly url to fancy url
    RewriteCond %{QUERY_STRING} id=([^&]*)
    RewriteRule ^news\.php$ news/%1/? [R]
    
    #Internally rewrite fancy url to a usable url
    RewriteRule ^news/([^/]*)/?$ news.php?id=$1 [END]