Правило переписать, чтобы скрыть папку, не работает правильно, без косой черты - PullRequest
1 голос
/ 02 декабря 2010

У меня странная проблема с apache mod_rewrite.Мне нужно скрыть подкаталог от пользователя, но перенаправить каждый запрос в этот подкаталог.Я обнаружил несколько схожих проблем в stackoverflow, но ничего не подходит, поэтому я решил опубликовать новый вопрос.

Мой .htaccess выглядит так:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)?$ foo/$1 [QSA,L]

Только для документа-корнясодержит следующую папку / файлы:

/foo/bar/index.html

Теперь я ожидаю, что example.com/bar и example.com/bar/ просто покажут мне содержимое index.html.

Вместо example.com/bar/ покажите мне содержимое, как и ожидалось, но example.com/bar перенаправит меня с 301 на example.com/bar/foo/, а затем покажет содержимое.Я действительно не понимаю, почему в этом случае существует перенаправление 301.

Когда я помещаю что-то такое

RewriteCond %{REQUEST_URI} !^[^.]*/$
RewriteCond %{REQUEST_URI} !^[^.]*\.html$
RewriteCond %{REQUEST_URI} !^[^.]*\.php$
RewriteRule ^(.*)$ $1/ [QSA,L]

поверх этого правила, оно, кажется, работает, но это потребуетперечислить все используемые расширения файлов ...

Есть ли другой способ, которым я могу опустить перенаправление, папка "bar" никогда не должна быть видна внешнему пользователю.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

Лучше поздно, чем никогда ...

Получилось работать с простым RewriteRule, который добавляет / к каждому URL, который не имеет.

# only directories
RewriteCond %{REQUEST_FILENAME} !-f
# exclude there directories
RewriteCond %{REQUEST_URI} !^/excluded-dirs
# exclude these extensions
RewriteCond %{REQUEST_URI} !\.excluded-extension$
# exclude request that already have a /
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]
0 голосов
/ 02 декабря 2010

1-е правило перезаписи перенаправляется с /foo/(.) на ($ 1), а второе - с (. ) на $ 1.

только идея, это не имеетбыл проверен.

...