【问题标题】:Rewriting URLs via .htaccess on a shared hosting environment在共享主机环境中通过 .htaccess 重写 URL
【发布时间】:2011-11-04 00:32:27
【问题描述】:

我的大学给了我一个免费的博客,里面有一些限制选项。它是可移动类型,我无法通过 MT 界面编辑 URL。

他们建议我放置一个 index.html 页面,将元重定向到我博客的完整 URL。相反,我想在 .htaccess 文件中使用 mod_rewrite 来屏蔽它。

如何更改此网址:

http://www.personal.mycollege.edu/myuserid/blogs/my_blog/

只是:

http://www.personal.mycollege.edu/myuserid/

另外,我怎样才能让它在整个网站的文章等中保持不变?

【问题讨论】:

  • 1) 您打算将此类.htaccess 放在哪里(哪个文件夹)?我想它会在/myuserid/.htaccess? 2) 其他 URL 应该如何路由(例如 /myuserid/blogs/my_blog/some-article - 应该如何重写?) 3) /myuserid/ - 它是一个真正的物理文件夹..还是用 .htaccess 重写(在顶层)? 4) 你真的可以在那个服务器上使用 .htaccess 和 mod_rewrite 吗?请您仔细检查一下。
  • 我可以在这台服务器上使用 .htaccess。我通过一个简单的测试验证了这一点。 /myuserid/ 是一个真正的文件夹,我将在其中放置 .htaccess。老实说,就帖子而言,我还不确定 URL 是如何形成的。静态页面是 page_name.htm
  • 我的意思是 -- 重写那个 URL 不是问题,但是其余的呢?

标签: .htaccess mod-rewrite moveabletype


【解决方案1】:

要重写(内部重定向)/myuserid//myuserid/blogs/my_blog/,同时在位于 /myuserid/ 文件夹中的 .htaccess 中有此规则,请使用此规则:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^$ blogs/my_blog/ [L]

如果你把这条规则加到上面这条规则的下面,你也应该重写文章等:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!blogs/my_blog/)(.+)$ blogs/my_blog/$1 [L]

上面的规则只会重写不存在的 URL(我认为这是一个正确的方法——如果你不这么认为,只需删除 2 行 RewriteCond 行)。这意味着如果请求 /myuserid/hello.png 并且文件确实存在,则不会将其重写为 /myuserid/blogs/my_blog/hello.png


理论上,您可以将这 2 个规则组合成一个规则(通过将 (.+) 替换为 (.*)),但由于某些奇怪的原因,它在某些服务器上不起作用(或工作不正确)。无论如何——这里是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!blogs/my_blog/)(.*)$ blogs/my_blog/$1 [L]

另外,我怎样才能让它在文章等上始终保持不变 网站?

这是一个非常具体的问题,在不知道它如何生成链接等的很多细节的情况下,我无法给你一个明确的答案。

有可能使用某种 ReverseProxy 来完成这项工作——而不仅仅是重写使用内部代理的东西——它将对用户完全透明(与重写相同)但应该能够修复从真实的页面到漂亮的页面。不幸的是,我对这个特定主题的了解非常有限,无法为您提供任何真实示例。

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 2013-11-22
    • 2013-12-31
    • 2013-07-07
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多