Запретить указание URL-адреса с каталогом на веб-страницу - PullRequest
0 голосов
/ 12 октября 2010

У меня есть домен, назовем его newsite.com, который припаркован на maindomain.com.Я использую mod-rewrite для направления всех запросов на newsite.com в подкаталог на maindomain.com.На newsite.com у меня установлен CodeIgniter.Это означает, что URL выглядят так:

newsite.com / products / shoes /

Вышеуказанное работает просто отлично.

Однако, если янастроить контроллер для такой страницы:

newsite.com / about / или newsite.com / about / faqs /

Iполучить 404, который, по моему мнению, вызван, потому что он ищет страницу maindomain.com/about.php, которая существует, но НЕ существует на newsite.com.

Мой вопрос ... какмне ПРЕДОТВРАТИТЬ URL-адреса, такие как newsite.com/about/, указывать на newsite.com/about.php?Это противоположно тому, что многие люди пытаются сделать (они, как правило, хотят, чтобы расширение файла отсутствовало).

Мне интересно, если это и настройки Apache или PHP, которые заставляют его искатьсначала файл, если он существует, а каталог - нет?Или мне нужно добавить больше правил переписывания модов?

Большое спасибо!

Редактировать - вот мой файл .htaccess в настоящее время.Он находится в корневом каталоге учетной записи общего хостинга maindomain.com.

# Redirect various urls to subfolders of the format: /site-thename/

RewriteEngine On

# Remove the www for NewSite.
RewriteCond %{HTTP_HOST} ^www.newsite.com$ [NC]
RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]

# Handle pages and directories that should not go through CodeIgniter.
RewriteCond %{HTTP_HOST} ^(www\.)?newsite\.com
RewriteCond %{REQUEST_URI} !^/site-newsite/
RewriteCond %{REQUEST_URI} ^/demo/ [OR]
RewriteCond %{REQUEST_URI} ^/robots\.txt [OR]
RewriteCond %{REQUEST_URI} ^/emailform\.php [OR]
RewriteCond %{REQUEST_URI} ^/assets/ [OR]
RewriteCond %{REQUEST_URI} ^/index\.php
Rewriterule ^(.*)$ /site-newsite/$1 [L]


# Handle CodeIgniter URLs.
RewriteCond %{HTTP_HOST} ^(www\.)?newsite\.com
RewriteCond %{REQUEST_URI} !^/site-newsite/
Rewriterule ^(.*)$ /site-newsite/index.php?/$1 [L]

Ответы [ 3 ]

2 голосов
/ 12 октября 2010

Спросил в отделе поддержки моей хостинговой компании, что может быть причиной этого ... и выясняется, что это вызвано Apache MultiViews.Это можно отключить с помощью

Опции -MultiViews

в файле htaccess.Это сработало.Спасибо за предложения.

0 голосов
/ 12 октября 2010

Я предполагаю, что если вы пользователь Apache, вы используете файл .htaccess для перенаправления URL-адреса на ваш файл 'index' (назовем его index.php).Также у вас должно быть что-то вроде:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

в вашем файле .htaccess.Обратите внимание, что условие RewriteCond имеет параметр , который проверяет, не является ли он файлом :-). Больше можно найти в http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

0 голосов
/ 12 октября 2010

Если у вас нет правил перезаписи, Apache по умолчанию будет ссылаться на все, что находится в файловой системе. Вы должны переписать там правила, чтобы Apache использовал определенный контроллер для обработки запросов, а не пытался ссылаться на объекты в файловой системе.

...