2010-01-05 127 views
5

當我輸入「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 

阿帕奇 「mod_dir」 模塊中。

所以,我的問題是: - 如何判斷服務器添加一個尾隨斜線當用戶鍵入一個URL 不帶後綴斜線; $

回答

13

你可以讓一個角色可選通過附加?量詞它是這樣的:

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] 

這些規則或者刪除或添加缺少的斜線,做一個永久的重定向。

+0

你錯過了在第二重寫規則括號。 – 2017-09-06 11:49:55

+0

請問,這是最終使用的規則組合嗎?我對這個問題非常感興趣,而且我無法正常運行......謝謝 – 2017-11-09 11:26:55

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程序作爲子網站,這是首先引發了所有這些瘋狂的事情......