2013-05-06 4 views
4

Ниже моя структура каталоговУдаление лидирующий слэш из каталога в HTAccess

Root/ 
    index.php 
    contact.php 
    projects.php 
       /index.php 
       /project1.php 
       /project2.php 

меня переписывает на месте, чтобы удалить расширение .php из всех имен файлов. Он отлично работает, и я могу получить доступ к www.website.com/projects/project2.php из www.website.com/projects/project2

Я также хочу, чтобы иметь возможность получить доступ к www.website.com/projects/index.php в www.website.com/projects

мне удалось написать правило, которое переписывает URL-адрес для www.website.com/projects/ когда я типа www.website.com/projects

Однако я не могу избавиться от последней конечной косой черты.

Обратите внимание, что я не очень разбираюсь в этом. Большая часть этого из того, что я нашел в Интернете. Я много огляделся, но до сих пор мне нечего было поработать.

Вот код:

Options +FollowSymLinks -MultiViews 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^\.]+)$ $1.php [NC,L] 
RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1] 
+0

Что вы пытаетесь получить mplish с этим: 'RewriteRule^([^ \.] +) $ $ 1.php [NC, L]'? –

ответ

8

Это вызвано mod_dir and the DirectorySlash directive. Он автоматически отправит 301 запрос на перенаправление для каталога, в котором отсутствует конечная косая черта. Это фиксирует проблему безопасности раскрытия информации (описанную в ссылке выше), которая перечисляет содержимое каталога, даже если есть индексный файл (например, index.php). Поэтому, если вы отключите эту функцию, будьте очень осторожны в своих каталогах. Если у вас отключена индексация каталогов, это не так важно.

Вы можете включить в каталог Slashes с помощью:

DirectorySlash Off 

Вы можете отключить индексацию каталога с помощью опций:

Options -Indexes 

И потом, вам нужно, чтобы ваши проекты править , прежде чем ваш правило расширения php:

Options +FollowSymLinks -MultiViews -Indexes 

DirectorySlash Off 

RewriteEngine on 

RewriteRule ^projects$ /projects/index.php [L,E=LOOP:1] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

Большое спасибо за объяснение. Он работает так, как я хотел! – ghosh

Смежные вопросы