2015-01-30 2 views
1

По какой-то причине мой .htaccess добавляет значение по умолчанию для _url.htaccess Значение по умолчанию для строки запроса

Мой .htaccess

AddDefaultCharset UTF-8 
DirectoryIndex index.php 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule> 

Когда я посещаю мой проект по http://localhost/my-project и сваливать строку запроса var_dump($_GET); я получаю следующий результат;

array(1) { 
    ["_url"]=> 
    string(11) "/index.html" 
} 

Когда я посещаю мой проект по http://localhost/my-project/test и сваливать строку запроса, я получаю следующий результат;

array(1) { 
    ["_url"]=> 
    string(11) "/test" 
} 

Я предполагаю, что это что-то делать с моей .htaccess и/или сервера конфигурации (Apache).

Есть ли какая-нибудь работа вокруг этой проблемы? Почему я не ожидал результата;

array(1) { 
    ["_url"]=> 
    string(11) "/" 
} 

Где это index.html приходит и как я могу избавиться от него?

ответ

1

Это index.html приходит из-за вашей DirectoryIndex директивы, которая, вероятно, установлен в:

DirectoryIndex index.html index.php 

При посещении http://localhost/my-project Apache нагрузок http://localhost/my-project/index.html из-за этой директивы и ваша REQUEST_URI становится index.html (в текущем каталоге).

Когда RewriteRule запускает его, он пропускает текущий URI как параметр GET, поэтому вы получаете index.html в _url Параметр GET.

Вы можете настроить свои правила, как это:

DirectoryIndex index.php 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)$ index.php?_url=/$1 [QSA,L] 
</IfModule> 

Теперь это правило перезаписи не будет вызываться для http://localhost/my-project, поскольку она является соответствием .+ шаблона.

+1

Извините, теперь я добавил полный код .htaccess. У меня был 'DirectoryIndex index.php', и он не работает. Поцарапать это! Оно работает. У меня был этот файл .htaccess в другой папке. Мне пришлось добавить 'DirectoryIndex index.php' в файл' .htaccess' родительского каталога, и он работает! Большое спасибо. – Revenant

+0

Добро пожаловать, рад, что это сработало. – anubhava

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