动态Mod_Rewrite用于唯一的自动生成链接

时间:2015-02-20 09:07:57

标签: php .htaccess mod-rewrite

我想知道这是否可行 -

我想使用htaccess简化我网站的链接,因为有些用户抱怨他们看起来像'垃圾邮件' - 他们目前很长时间。

我知道我可以沿着这些方向使用某些东西 -

website.com/subfolder/index.php/123456加入website.com/123456

RewriteRule ^/123456$ /subfolder/index.php/123456

但是我的问题在于这些链接需要是动态的。我试过看了这个,但我读到的其他类似问题是关于使动态php链接美化并给出具体答案。


这是我到目前为止所做的:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/$ /subfolder/index.php/$1 [NC,L,QSA]

使用输入网址http://website.com/id/123456http://htaccess.madewithlove.be(非常好的网站顺便说一句)上进行测试得到http://website.com/subfolder/index.php/id/123456 - 如果我能找到一种方法来删除/ id /,这将是很好的那个链接

3 个答案:

答案 0 :(得分:2)

要支持/123456/id/123456,您可以使用:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^(?:[^/]+/)?(\d{6})/?$ subfolder/index.php/$1 [L]

它会将两个URI转发到/subfolder/index.php/123456

由于在上面的模式中使用/d{6}/?$,它只会匹配URI,例如:

/123456
/123456/
/id/123456
/foobar/123456

参考文献:

答案 1 :(得分:0)

我这样做,并且我不确定这是最优化的方式,是在子文件夹中有一个.htaccess,让我们假设' / news',有点像这样:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ /news.html?Path=$1 [NC,L,QSA]

现在在' / news'中的任何请求将被重定向到' /news.html'以url作为参数,但访问者只会看到第一个。因此,假设访问者要求:

http://www.domain.com/news/happy_story.html

这将在内部成为:

http://www.domain.com/news.html?Path=/news/happy_story.html

在此HTML页面中,您可以使用Path参数来确定要显示的内容。您可以使用多个子文件夹来处理不同的事情。

同样,我不知道这是做这件事的正式方式,但它对我有用。

如果有很多选项,您可能会使用编号系统。这样的数字可以引用数据库中的索引。

由于第一个URL并不真正引用某个页面,因此很大一部分内容可能是您想要的任何内容。假设您为newsitems编号,并使用如下URL:

http://www.domain.com/news/265/The_day_that_the_happy_news_was_annouced

在后台,您只查找网址中的数字,而忽略其余部分。因此,只要数字正确,就会显示正确的页面。此URL将提供相同的结果:

http://www.domain.com/news/265/Happy_story_day

等等。

答案 2 :(得分:0)

KIKO的答案很好,只要您公开包含文档路径的一部分或某个数据库ID的URL。

如果您不想这样做,请创建一个“中心”页面(就像那些URL缩短器一样),在这里您可以在数据库中查找一些简短的URL并在PHP中进行重定向。

所以说你创建了一篇新闻文章标题为“一些快乐的故事!里面有一些c's垃圾/垃圾字符”,你清理字符串,将它与你的真实文章网址一起存储在一些数据库中:

| short_url                              | long_url                                   |
| "some_happy_story_with_some_uber_crap" | "http://website.com/news/article.php/1234" |

通过这种方式,您还可以使用几个指向同一篇文章的短网址(例如,从“官方”网址中删除一些停用词)。

在hub.php中(也可以被一些RewriteRule覆盖),你

SELECT long_url FROM urls WHERE short_url='<script_path>'

或类似,并发出

header("Redirect: ".$long_url); exit;