当我输入“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时,如何告诉服务器添加尾部斜杠 没有尾部斜杠; $
答案 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/myalias1和http://example.com/myalias1/都可以正常使用。
示例:
sudo vi /etc/apache2/apache2.conf
Alias /myalias1 "/path/to/folder1"