【问题标题】:.htaccess URL Rewrite to Subdirectory.htaccess URL 重写到子目录
【发布时间】:2010-10-26 06:09:54
【问题描述】:

将“/some/subdir”下面的任何内容重写为“/some/subdir/projects”的最佳方法是这样的:

http://www.mydomain.com/some/subidr/test/

...到这个:

http://www.mydomain.com/some/subdir/projects/test/

我发现similar question 已发布,但该解决方案似乎不适用于我的情况。到目前为止我目前的尝试(这似乎不起作用):

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/projects/.*$
RewriteRule ^(.*)$ /projects/$1 [L]

编辑:我忘了提到 .htaccess 文件必须位于 /some/subdir 中,因为我没有对服务器的 Web 根目录的写入权限。

【问题讨论】:

    标签: .htaccess mod-rewrite rewrite


    【解决方案1】:

    在服务器文档根目录中的 .htaccess 配置文件中尝试此规则:

    RewriteEngine on
    RewriteRule !^some/subdir/projects(/|$) some/subdir/projects%{REQUEST_URI} [L]
    

    由于您想在/some/subdir/ 目录中使用此规则,请按如下方式更改规则:

    RewriteRule !^projects(/|$) projects%{REQUEST_URI} [L]
    

    如果你想将/some/subdir/projects/foobar的任何请求重定向到/some/subdir/foobar,把这条规则放在前面提到的上面: p>

    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /some/subdir/projects[/?\s]
    RewriteRule ^some/subdir/projects/?([^/].+)?$ /some/subdir/$1 [L,R=301]
    

    【讨论】:

    • 由于我没有对服务器的 Web 根目录的写入权限,我该如何使用“/some/subdir”中的 .htaccess 文件来执行此操作?
    • 从模式和替换中删除some/subdir/。其余的应该没问题。
    【解决方案2】:

    这是我终于开始工作的解决方案:

    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} !^/some/subdir/projects/.*$
    RewriteRule ^(.*)$ /some/subdir/projects/$1 [L]
    

    【讨论】:

    • 看起来是重定向,而不是重写
    【解决方案3】:

    我会用这个:

    RewriteEngine On
    RewriteRule ^(/some/subdir)/(.*)$ $1/projects/$2
    

    这会将/some/subdir/<anything> 重定向到/some/subdir/projects/<anything>

    请注意,实际上需要前导 / 来匹配 URL 的开头,除非您在某处设置了 RewriteBase /

    【讨论】:

    • 只有在服务器或虚拟主机配置中使用时才需要前导斜杠。在 .htaccess 配置文件中,每个目录的前缀如果在测试之前被删除,然后附加到替代品中。
    • 我对子文件夹中的/缺失感到非常头疼, - 关于这个问题的信息不多,但如果你只想重定向到这个人实际来自的子文件夹,请执行以下操作 - RewriteRule / ?([^/].+)?$ examplen.com/$1 [R=301,L]
    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2012-01-26
    相关资源
    最近更新 更多