我想知道这是否可行 -
我想使用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/123456
在http://htaccess.madewithlove.be(非常好的网站顺便说一句)上进行测试得到http://website.com/subfolder/index.php/id/123456
- 如果我能找到一种方法来删除/ id /,这将是很好的那个链接
答案 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;