尾随斜杠问题

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

那么,我想要做的是当用户键入“ http://example.com/Hello%20There ”(所以像第一个,除了没有结尾的斜线)。

我尝试了很多东西,特别是正则expression式,但没有任何效果,因为我认为服务器在find空格(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没有结尾的斜杠时添加一个尾部的斜线; $

您可以通过添加? 量词如下:

 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] 

这些规则要么删除或添加一个缺少的尾部斜线,并做一个永久的重定向。

我有同样的问题,但我使用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程序作为子网站,这就是所有这些疯狂的开始…

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

这两个网址http://example.com/myalias1和http://example.com/myalias1/都可以正常工作&#x3002;

例:

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