2013-03-09 7 views
-1

У меня есть следующий url: myweb.com/products
У меня есть каталог под названием «продукты» на моем хосте.
.htaccess как игнорировать каталоги?

При вводе вышеуказанного URL-адреса он перенаправляет меня на myweb.com/products/ и перечисляет файлы внутри каталога.
Как я могу игнорировать/отключать способ его работы, поэтому вместо поиска в каталоге с именем он попытается найти файл с этим именем?

так, когда я вхожу myweb.com/products он попытается найти файл с именем продуктов, и если оно не найти будет отправить 403 страницы

* это пример. У меня больше каталогов.

EDIT:
Возможно, я не очень хорошо себя объяснил.
У меня есть следующие RewriteRule

RewriteRule ^(.*).php redirect.php [L,QSA] 

который перенаправляет меня все, чтобы redirect.php
, поскольку продукты является папка, он не перенаправляет меня redirect.php и вот проблема ..

ответ

2

Если у вас есть каталог с таким именем, apache не может найти файл с таким именем.

Чтобы отключить листинг каталога Используйте Options директиву

Options -Indexes 

Это предотвратит содержимое каталога быть в списке. Но сообщение об ошибке не является 404 страницей, а скорее 403 Запрещено.

Кроме того, вы должны отключить поиск для index файла с

DirectoryIndex disabled 

В противном случае, Apache будет показывать index.html, index.php, ... файл, если он существует.

Для предотвращения слэш добавляется в конце каталогов, используйте

DirectorySlash off 

Переписать в файл с тем же именем и .php добавленным, вы можете использовать этот RewriteRule

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule (.+)/ $1.php 

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

Если вы хотите редирект, а не просто переписывание, вы должны добавить R флаг к RewriteRule

RewriteRule (.+)/ $1.php [R,L] 

И если он должен переписать redirect.php вместо product.php используйте

RewriteRule (.+)/ redirect.php 

Объединяя все это, это дает упрощение

DirectorySlash off 

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ redirect.php [L] 
+0

отредактировал мой вопрос до 403. Я не хочу, чтобы это была ошибка 403. Она должна перейти к файлу продуктов. в godaddy он работал по умолчанию. теперь я переехал в hostgator – Ron

+0

@Ron Если есть каталог продуктов, как Apache найдет файл продуктов? У вас не может быть каталога * и * файла с тем же именем. –

+0

имя файла iscourse products.php. Я расскажу, что я делаю. Я перенаправляю все на страницу с именем redirect.php, используя rewriterule. теперь, пытаясь получить доступ к myweb.com/products, он должен перенаправить меня на redirect.php, так как это rewriterule, но поскольку продукты являются папкой/каталогом, он не делает этого – Ron

0

Написать index.php в myweb.com/products, чтобы отфильтровать ваше желаемое имя, я думаю.

+0

Что ты имеешь в виду? Я просто помещаю пустой index.php в продукты, но он все же перенаправляет меня на myweb.com/products/. хотя он не перечисляет файл .. но это не то, что я хочу. – Ron

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