【问题标题】:Trailing slashes problem尾随斜杠问题
【发布时间】:2010-01-05 13:11:45
【问题描述】:

当我输入这个 "http://example.com/Hello%20There/" 时,它会显示 索引页是:“http://example.com/Hello%20There/index.html”。

好吧,我想做的是当用户输入“http://example.com/Hello%20There”时 (所以和第一个一样,只是它没有尾部斜杠)。

我尝试了很多东西,特别是正则表达式,但没有任何效果,因为我认为 服务器在找到空格(URL 中的“%20”)时停止 reg exp 进程。

我试过这个正则表达式:

Options +FollowSymLinks 
rewriteEngine On rewriteCond %{REQUEST_URI} ^(.*)\ (.*html)$ 
rewriteRule ^.*$ %1-%2 [E=space_replacer:%1-%2] 
rewriteCond %{ENV:space_replacer}!^$ 
rewriteCond %{ENV:space_replacer}!^.*\ .*$ 
rewriteRule ^.*$ %{ENV:space_replacer} [R=301,L] 

也放:

DirectorySlash On 

在 Apache 的“mod_dir”模块中。

所以,我的问题是: - 当用户输入一个 url 时如何告诉服务器添加一个斜杠 没有尾部斜杠;$

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    您可以通过将? 量词附加到它来使字符成为可选,如下所示:

    RewriteRule ^([^/]+)/?$ $1/index.html
    

    现在/foobar/foobar/ 都将被重写为/foobar/index.html

    但最好只使用一种拼写,带或不带斜杠,然后重定向另一种:

    # remove trailing slash
    RewriteRule (.+)/$ /$1 [L,R=301]
    
    # add trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*[^/]$ /$1/ [L,R=301]
    

    这些规则删除或添加缺少的尾部斜杠并执行永久重定向。

    【讨论】:

    • 您在第二个重写规则中遗漏了括号。
    • 请问,最终使用哪种规则组合?我对这个问题很感兴趣,但我无法让它正常运行...谢谢
    【解决方案2】:

    我遇到了同样的问题,但我使用 mod_alias 来设置子站点。事实证明,我需要制作第二个没有斜杠的别名,这样它才能正常工作。看起来像这样:

    Alias /forum/ "/var/www/forum"
    Alias /forum "/var/www/forum"
    
    <Directory "/var/www/forum">
        Options FollowSymlinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    

    在 Ubuntu 中,我必须使用这些行编辑 /etc/apache2/mods-enabled/alias.conf 文件,然后重新启动 apache。在网上的任何地方都找不到这个答案;我自己偶然发现了它,因为 mod_rewrite 没有工作并且 DirectorySlash 命令也没有帮助。我在 Drupal 安装下附加了一个非 Drupal 程序作为子站点,这首先引发了所有这些疯狂......

    【讨论】:

      【解决方案3】:

      不要使用尾部斜杠来定义别名。

      http://example.com/myalias1http://example.com/myalias1/ 这两个 URL 都可以正常工作。

      例子:

      sudo vi /etc/apache2/apache2.conf            
      
      Alias /myalias1 "/path/to/folder1"           
      

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 2010-09-14
        • 2020-05-20
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多