Запаздывающая проблема наклонных черт

Когда я ввожу этот "http://example.com/Hello%20There/", это отображает индексную страницу, которая является: "http://example.com/Hello%20There/index.html".

Ну, что я хочу сделать, когда пользователь вводит "http://example.com/Hello%20There" (таким образом, как первый кроме него не имеет запаздывающей наклонной черты).

Я попробовал много вещей и специально регулярных выражений, но ничто не работает, потому что я думаю, что сервер останавливает reg exp процесс, когда он находит пространство (" %20" в URL).

Я попробовал этот 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" модуле Apache.

Так, мой вопрос: - как сказать серверу для добавления запаздывающей наклонной черты, когда пользователь вводит URL без запаздывающей наклонной черты; $

6
задан Jonathan Leffler 11 September 2015 в 20:21
поделиться

1 ответ

Вы можете сделать символ необязательным, добавив ? квантификатор к нему вот так:

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

Теперь оба /фобар и /фобар/ будут переписаны на /фобар/index.html.

Но было бы лучше, если бы вы использовали только одно написание, с трейлинговой косой чертой или без нее, и перенаправили другое:

# remove trailing slash
RewriteRule (.+)/$ /$1 [L,R=301]

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

Эти правила либо удаляют или добавляют недостающую трейлинговую косую черту, либо делают перманентный перенаправление.

.
15
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: