使用.htaccess更改PHP GET URL

时间:2014-06-04 17:35:17

标签: php html .htaccess

我的index.php文件从数据库中下拉文章列表,目标是用户可以点击它们查看完整文章。链接如下所示:

echo "<tr><td colspan='2'><a href='"."article.php?type=".$type."&id=".$id."&title=".$title."'>".$title."</a></td></tr>";

制作网址如下:

http://example.org/article.php?type=news&id=2&title=second-article-test

index.php文件中的所有文章都链接到同一目录中的article.php

目标是让更友好的网址显示如下:

http://example.org/news/2/second-article-test

我一直在玩一些.htaccess配置,包括:

RewriteEngine On
RewriteCond %{REQUEST_FILE} !-f
RewriteCond %{REQUEST_FILE} !-l
RewriteCond %{REQUEST_URI} !^/article\.php [NC]
RewriteRule ^(.+)$ /article.php/$1 [L]

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/article/?
RewriteCond %{REQUEST_FILE} !-f
RewriteCond %{REQUEST_FILE} !-l
RewriteRule ^(.*)$ article.php?type=$1&id=$2&title=$3 [QSA,L]

但我似乎无法让它发挥作用。

我的两个问题是:

  1. 如何使用example.org/type/id/title更改变量GET链接更友好?
  2. 如何隐藏我在网址中链接的article.php文件?
  3. 我尝试了大约20种变体,每当有些事情搞砸了,如果有人知道如何解决这些问题,请尝试解释一下,以便我下次知道,谢谢!

2 个答案:

答案 0 :(得分:2)

你不应该将变量映射的逻辑放入.htaccess文件中。

查看how to hide the php extension上的stackoverflow问题,然后你需要编写某种类型的FrontController(你需要解析$ _SERVER [&#39; REQUEST_URI&#39;]并确定解压缩的位置路径元素变成变量)。但实际上,这已经做了很多次你应该研究一个为你做这个的框架。如果您想要一些非常小的内容,请查看SilexSlim

答案 1 :(得分:1)

你可以玩这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/?article/?
RewriteCond %{REQUEST_FILE} !-f
RewriteCond %{REQUEST_FILE} !-l
RewriteRule ^/?(.*?)/(.*?)/(.*?)/?$ article.php?type=$1&id=$2&title=$3 [QSA,L]
# example.org/type/id/title