Apache «Объект не найден!» По URL «/ error / *»

1

Надеюсь, кто-то может помочь мне определить, где моя проблема. У меня есть целая PHP-архитектура приложения, которая объединилась. Он работал отлично, пока я не попытался создать карту URI (аналогично тому, как работает Slim Framework). Вот пример кода (хотя использование другой архитектуры, аналогичной CodeIgniter, которую я построил в прошлые годы, имеет такую же проблему):

class Err extends Base_Director {
    function __construct() {

        /* THIS WORKS EITHER WAY! */
        $this->get('/', function(){
            echo 'Error.';
        });

        /* THIS WORKS VIA '/err/404' BUT NOT WHEN CLASS IS 'error' ('/error/404') */
        $this->get('/404', function(){
            echo 'Numeric Error 404.';
        });

        /* THIS WORK VIA '/err/four' BUT NOT WHEN CLASS IS 'error' ('/error/four') */
        $this->get('/four', function(){
            echo 'Alphanumeric Error.';
        });

        $this->submit();
    }
}

Я действительно думаю, что это проблема с Apache, но Googling и поиск StackOverflow не активировали ничего, что работает. Кажется, что любой URL-адрес с использованием переменной $ _GET (с '/error/*') возвращает Apache "Object not found!" стр. Содержание на странице:

Запрошенный URL-адрес не найден на этом сервере. Если вы указали URL вручную, проверьте правильность написания и повторите попытку.

Однако каждое другое значение URL-адреса отлично работает.

В прошлый раз, когда я попытался решить эти неудобства, я подумал, что это может быть зарезервированное ключевое слово или что-то в Apache, но я никогда не прорывал файлы веб-сервера, опасаясь, что я могу что-то испортить. Если есть какой-то код, который, по вашему мнению, я должен включить, сообщите мне. Вот мой .htaccess который я использую кстати:

DirectoryIndex index.php
RewriteEngine On

RewriteCond %{REQUEST_URI} !^(index\.php|\.swf|forums|images|css|downloads|js|robots\.txt|favicon\.ico)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ ./index.php?url=$1 [NC,QSA,L]

Обновление: я рассмотрел проблему больше, чтобы помочь ее сузить. "example.com/error/404" возвращает "Объект не найден!". как я уже говорил выше, и все же "example.com/Error/404" проходит через штраф.

Обновление 2: Вот моя конфигурация httpd:

    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.4/mod/core.html#options
        # for more information.
        #
        Options Indexes FollowSymLinks Includes ExecCGI
    
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   AllowOverride FileInfo AuthConfig Limit
        #
        AllowOverride All
    	Order allow,deny
    	Allow from all
        #
        # Controls who can get stuff from this server.
        #
        Require all granted
    </Directory>

Не хотел наводнять это сообщение, поэтому можно найти остальную часть моего файла httpd на PasteBin

  • 0
    приведите пример URL, который вы пытаетесь использовать, который получает эту ошибку
  • 0
    Спасибо Томаш за исправления в формате. Все, что находится после «example.com/error/», получает эту ошибку (например, «example.com/error/example» или «example.com/error/hello»).
Теги:
dictionary
.htaccess
uri

1 ответ

0
Лучший ответ

Замените все, что вы написали этим, он сделает то же самое и может исправить вашу проблему:

DirectoryIndex index.php
RewriteEngine On

RewriteRule /error/(.*) /err/$1 [L,R=301]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule (.*) /index.php?url=$1 [L]

EDIT by Trevor: Я получил вышеописанную работу после редактирования httpd-multilang-errordoc.conf и комментирования Alias/error/"C: /xampp/apache/error/". Можно также просто изменить перенаправление ошибок через псевдоним. Это похоже на функцию Xampp, и мое дополнение к решению может не работать с другими "пакетами" сервера.

  • 0
    Мы выполнили свежую установку последней версии xampp на совершенно другом компьютере и удалили весь мой php-код, кроме print_r($_GET) и предоставленного вами файла .htaccess, и столкнулись с той же проблемой.
  • 0
    Чтобы получить больше информации, увеличьте уровень журнала: LogLevel debug rewrite:trace8 для журналов перезаписи, чтобы увидеть, являются ли правила takeb и почему они не совпадают, и больше журналов в вашем httpd.conf вместо строки LogLevel warn
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню