【问题标题】:mod_rewrite forward shortend URLmod_rewrite 转发缩短的 URL
【发布时间】:2013-01-09 11:11:23
【问题描述】:

我正在寻找一种方法来为我的页面上的较长 URL 创建一个短 URL 路径

长网址为:domain.com/tagcloud/user.html?t=1234ABCD

我想提供一个简短的 URL 版本以便于访问它:

domain.com/t/1234ABCD

我尝试了一些示例,但我不明白如何转发这些规则。

RewriteRule ^(.*)/t/$ /tagcloud/user.html?t=$1 [L]

我也在使用 MODX,所以他们已经使用了规则。

除了我的 htaccess 文件

RewriteEngine On
RewriteBase /

# Always use www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

我必须将上面的代码 sn-ps 保存在我的 htaccess 文件中。第一个只是将http://domain.com 请求转发到 www.domain.com

友好的 URL 部分用于将我的 CMS 的内部 ID 转换为 URL 的别名。必须保留此功能,因为我尝试在 htaccess 中进行的更改不会影响整个站点...

我只是想添加一个监听器,仅当 URL 匹配 www.domain.com/t/abcd1234 时

因此我需要一些标识 www.domain.com/t/ URL

非常感谢您的帮助

【问题讨论】:

  • tagcloud 规则的 RewriteCond 是什么?
  • Gereon,我试图写这个规则,但我失败了。到目前为止,还没有任何规则。我只是想在我当前的 htaccess 文件中添加一个规则来补充它,如果输入“触发器”shortendURL,它会被转发到实际的长 URL。

标签: mod-rewrite


【解决方案1】:

试试这个:

RewriteCond %{REQUEST_URI} ^/t/.*
RewriteRule ^t/(.*)$ /tagcloud/user.html?t=$1 [R=301,L]

【讨论】:

  • 谢谢。您编码的方式似乎是正确的,但我不是 mod 重写专家......不幸的是它不起作用。如果我输入它,CMS 会引用页面的站点地图,如果找不到具有给定别名的文档,则会自动显示...所以我猜该规则可能无法压倒其他规则?
  • 这取决于以什么顺序评估其他规则。您粘贴在完整的 .htaccess 上方的内容是什么?尝试将新规则移到重定向到 index.php 的规则上方
  • 我编辑了我的评论并添加了我的整个 htacess 文件。我尝试将您的代码 sn-p 放在“友好 URL 部分”之上。点它没有效果。它仍然会将我引导到 CMS 内部未找到页面。
  • 我的错,我的原始答案中有一个额外的 /,我已经更新了 RewriteRule
  • 很棒的 Gereon。你搞定了。有用。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多