.htaccess将所有子目录重定向到root(Kinda)

时间:2014-01-29 13:41:33

标签: .htaccess mod-rewrite redirect

这并不像标题所暗示的那样直截了当。我会试着解释一下。

我目前正在制作一个基于重写网址的视频网站。 我目前正在使用此规则:

  

重写发动机   RewriteCond%{REQUEST_FILENAME}! - f
  的RewriteCond   %{REQUEST_FILENAME}! - d
  RewriteRule ^(。*)index.php?url = $ 1 [L,QSA]

这用于让用户访问具有良好外观的视频,如下所示:

domain.com/kJbSGe5X 而不是 domain.com/?v=kJbSGe5X domain.com/index.php?v=kJbSGe5X 例如。

现在的问题是,无论何时添加尾部斜杠,css都会中断。 我尝试过在css url前添加斜杠的解决方案,如下所示:

<link href="/css/bootstrap.css" rel="stylesheet">

......但它不起作用。

解决方案是否可以在尾部斜杠(包括尾部斜杠)之后将所有urlstrings重写为相同的url,而不使用尾随字符串?像这样:

domain.com/kJbSGe5X / domain.com/kJbSGe5X/randomchars 指向: domain.com/kJbSGe5X - 我该怎么做呢?

我想这个问题可能有更好的解决方案,但我对此很新。 任何帮助表示赞赏。

提前致谢!

- 编辑 -

我更喜欢一种解决方案,其中尾随斜杠之后的所有内容都被重定向到相同的url,而不会在尾随之后使用尾部斜杠+任何字符串。 (如果所述网址中没有内容)

我可能已经非常重视css问题 - 像这样的规则可以很好地解决我的网站设置问题。

3 个答案:

答案 0 :(得分:1)

在现有规则之前插入此规则以删除任何尾部斜杠:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s/+([^/]+)/.*?\sHTTP/ [NC]
RewriteRule ^ /%1? [R=301,L]

答案 1 :(得分:0)

您可以尝试忽略重写规则中的css目录:

RewriteCond %{REQUEST_URI} !^/css/

这不是你要求的,但是如果从重写规则中排除特定目录(可能是/ css,/ js等),那么你就不必担心格式化你的好/短视图URL了在斜线或其他任何东西后的任何东西。

答案 2 :(得分:0)

这是我的完整解决方案。在anubhava的帮助下!

从所有网址中删除尾随斜杠:

  

上的RewriteEngine      

RewriteCond%{REQUEST_FILENAME}!-d

     

RewriteCond%{THE_REQUEST} \ s(。+?)/ + [?\ s]

     

RewriteRule ^%1? [R = 301,L]

限制“创造美观”的网址,只有在8个字符(这是视频的每个短链接的长度)时才能工作:

  

RewriteCond%{REQUEST_FILENAME}!-f

     

RewriteCond%{REQUEST_FILENAME}!-d

     

RewriteRule ^(。{8})$ index.php?url = $ 1 [QSA,L]