拖尾斜线问题

时间:2010-01-05 13:11:45

标签: apache mod-rewrite

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

嗯,我想要做的是当用户输入“http://example.com/Hello%20There”时 (就像第一个一样,除了没有尾部斜线)。

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

我试过这个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时,如何告诉服务器添加尾部斜杠 没有尾部斜杠; $

3 个答案:

答案 0 :(得分:15)

您可以通过将?量词添加到其中来使字符成为可选字符:

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]

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

答案 1 :(得分:1)

我遇到了同样的问题,但我正在使用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程序作为子网站,这就是首先引发所有这些疯狂的事情...

答案 2 :(得分:0)

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

网址http://example.com/myalias1http://example.com/myalias1/都可以正常使用。

示例:

sudo vi /etc/apache2/apache2.conf            

Alias /myalias1 "/path/to/folder1"