Проблема с косыми чертами - PullRequest
6 голосов
/ 05 января 2010

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

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

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

Я пытался это рег опыта:

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 без косой черты; $

Ответы [ 3 ]

15 голосов
/ 05 января 2010

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

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 голос
/ 20 июля 2013

У меня была такая же проблема, но я использовал 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, и именно это положило начало всему этому безумию ...

0 голосов
/ 07 мая 2014

Не используйте косую черту для определения псевдонима.

Оба URL http://example.com/myalias1 и http://example.com/myalias1/ будут работать нормально.

Пример:

sudo vi /etc/apache2/apache2.conf            

Alias /myalias1 "/path/to/folder1"           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...