2015-09-17 2 views
1

Я видел несколько других тем по этому поводу, но по какой-то причине в моем конкретном случае решения не работают.RewriteCond% {REQUEST_FILENAME}! -d не работает

Вот .htaccess

DirectoryIndex index.php index.html index.htm 
Options +FollowSymLinks -Multiviews -Indexes 
RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?page=$1 

желаемый эффект, что index.php будет загружать какие-либо страницы запрашивается в ГЭТ (/ события-дневник = index.php? Страница = события-дневник) & это нормально работает.

Однако у меня есть некоторые реальные каталоги, которые должны быть доступны, например,/администратор/

выше .htaccess работает прекрасно как хотелось бы на моем домашнем компьютере MAMP, он отлично работает на моем Amazon Micro, так ли не будет работать на сервере развертывания ipage.com

При вводе/администрировании он будет перенаправлен на корневой индекс. При вводе /admin/index.php это работает, но вы должны указать на страницу index.php

Я не могу понять, когда это, кажется, не обращая внимания на -d

UPDATE:

индекс .php содержит следующую PHP

if(!isset($_GET['page'])){ 
    header("Location: home"); 
    exit; 
} 
$line=page_content($_GET['page']); 

к сведению, что эта функция отлично на 2 других серверах, я не понимаю, почему он будет вести себя по-разному на 3-й.

+0

Что происходит, когда вы вводите: 'example.com/admin /' в браузере? – anubhava

+0

перенаправляет на example.com/home, который является index.php? Page = home – RiquezJP

+1

Попробуйте использовать '-MultiViews' с прописными буквами' V'. – Croises

ответ

1

Использование:

Options +FollowSymLinks -MultiViews -Indexes 

-MultiViews С с прописными буквами V.
Для Apache в некоторых случаях очень важны верхний/нижний регистр

+0

Спасибо за ответ и действительно отличный совет для будущего. Я думаю, мы все копируем и вставляем стандарт.htaccess & изменить его, но мы скопируем и вставим плохую практику, не зная золотого наконечника вот так :-) – RiquezJP

+1

Добро пожаловать, рад, что это сработало. Я должен сказать, что я не считаю очень естественным способ, которым Apache справляется с этим. – Croises

0

Вот другой набор правил перезаписи, которые могли бы работать для вас:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?page=$1 [NC,L] 

Вы пытаетесь маршрутизировать вещей /admin/index.php? Если это так, вы можете создать копию своего .htaccess, загрузить его в каталог/admin и установить RewriteBase в/admin.

или, если вы хотите, чтобы включить двигатель переписывания в каталоге/администратора, вы можете создать файл, который содержит .htacess:

RewriteEngine off 
0

Трудно разместить эти предложения в комментариях так прибегая к ответу ,

Попробуйте это правило:

ErrorDocument 404 default 
ErrorDocument 403 default 
DirectorySlash On 
DirectoryIndex index.php index.html index.htm 
Options +FollowSymLinks -Multiviews -Indexes 

RewriteEngine on 
RewriteBase/

RewriteCond %{DOCUMENT_ROOT}/$1 !-f 
RewriteCond %{DOCUMENT_ROOT}/$1/ !-d 
RewriteRule ^([\w-]+)/?$ index.php?page=$1 [L,QSA] 
Смежные вопросы