Простая проблема с MOD_REWRITE в свободной рамке
-
14-10-2019 - |
Вопрос
Я пытаюсь настроить и изучать безразличную рамку для PHP.http://fatfree.sourceforge.net/
Настройка довольно просто, и я запускаю его на своей машине, используя MAMP.
Я смог получить пример «Hello World». Just Fin:
require_once 'path/to/F3.php';
F3::route('GET /','home');
function home() {
echo 'Hello, world!';
}
F3::run();
Но когда я пытаюсь добавить во вторую часть, которая имеет два маршрута:
require_once 'f3/f3.php';
F3::route('GET /','home');
function home() {
echo 'Hello, world!';
}
F3::route('GET /about','about');
function about()
{
echo 'About Us.';
}
F3::run();
Я получаю ошибку 404, если попробую второй URL: /О
Не уверен, почему один из mod_rewrite
Команды будут работать, а не другие.
Ниже мой .htaccess
файл:
# Enable rewrite engine and route requests to framework
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
# Disable ETags
Header Unset ETag
FileETag none
# Default expires header if none specified (stay in browser cache for 7 days)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A604800
</IfModule>
Решение
Так что мой друг действительно помог мне с этой проблемой. Я столкнулся с той же проблемой, но в основном я также использую MAMP и имею все свои безразличные файлы в fatfree
DIR В рамках HTDOCS MAMP.
Решение в том, что вам нужно модифицировать RewriteBase
указать на /[dirname]/
вместо просто /
а затем изменить RewriteRule
к /[dirname]/index.php
.
Мой .htaccess выглядит так:
RewriteEngine On
RewriteBase /fatfree/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /fatfree/index.php [L,QSA]
После того, как это установлено, вы можете точно следовать примеру в DOC без жира, и это будет работать как очарование. Это на некоторое время озадачило меня, и это было все, что ему было необходимо. Кроме того, если вы используете MAMP, отредактируйте httpd.conf
Файл в /Applications/MAMP/conf/apache
И обязательно измените следующее:
<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>
к
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
В основном изменение None
к All
.
Другие советы
Если вы запускаете F3 в подпапке, вы должны изменить перезаписи в .htaccess, чтобы соответствовать папке.
В вашем .htaccess у вас есть «index.php».
# Enable rewrite engine and route requests to framework
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L,QSA]
В противном случае, когда он пытается переписать /о /о /он будет искать /about/index.php вместо просто root /index.php
У меня только что была еще одна мысль ... возможно, «возможно, что mod_rewrite интуитивно», может быть причуда с сервером, заставляя его не переписать ..
Если мировой маршрут ниже не работает, вы можете проверить переписывание
RewriteRule ^/google http://www.google.com [L,NC];
Вы также можете попробовать глобальный путь для каталога
F3::route('GET /about/*','about');
Но это означает, что кто -нибудь в Domain.com/about/ ...... что -нибудь ... будет перенаправить функцию о ...
Примечание о mod_rewrite и ff
Как вы сказали, FF является вам 404, потому что он ожидает '/' вместо '/index.php' ... однако, это index.php, который ожидает разницы ..
Чтобы продемонстрировать это, я считаю, что вы можете дублировать свой
F3::route('GET /','home');
в качестве
F3::route('GET /index.php','home');
и страница должна отображаться ...
Причина этого в том, что если вы просто перейдете на / каталог (или /индекс.php) eitehr Way Apache обслуживает страницу index.php ....
Mod_rewrite позволяет перенаправить /abled и перенаправить его на index.php .. так что если ваше правило перезаписывания не работает, то перенаправление /переписывание не произойдет, и вы получите 404 ...
Как я упоминал выше, проверьте MOD_REWRITE с правилом Google .. затем попробуйте перейти к http://localhost:80/google
Если он не перенаправляет вас в Google, то ваш двигатель переписывания не работает ... (вероятно, проблема с конфигурацией Windows ..)
Чтобы включить mod_rewrite под Windows: Откройте http.conf Найдите эту строку:
#LoadModule rewrite_module modules/mod_rewrite.so
Удалите отметку комментариев (#) из строки ... так что у вас есть: загрузка модуля rewrite_module modules/mod_rewrite.so Сохранить файл и перезагрузить Apache ..
Альтернатив .. Я думаю, вы можете просто сказать:
LoadModule rewrite_module modules/mod_rewrite.so
В начале вашего файла HTACCESS ...
Я ударил голову об этом в течение 2 дней. Я отлаживал HTACCESS и PHP оба. Фактическая проблема заключается в следующем:
Если вы скопировали файл .htaccess из их fatfree-1.4.4. .htaccess это htaccess (. отсутствует) Просто переименовать этот файл в.
Я использую это .htaccess работает тоже для неровных папок
Options -Indexes
IndexIgnore *
RewriteEngine On
RewriteCond $1 !^(index\.php|images|main\.css|form\.css|favicon\.ico|robots\.txt|sitemap\.xml)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Примечание. Если вы хотите позвонить в свой файл .htaccess Что -то еще, вы можете изменить имя файла, используя директиву AccessFilename. Например, если вы предпочитаете позвонить в файл .config, вы можете поместить следующее в файле конфигурации вашего сервера:
AccessFileName .config
Этот ответ может быть слишком поздно для вас, но вчера у меня была та же проблема.
Похоже, проблема в том, что Apache не переписывает URL -адреса. У меня была такая же проблема, когда я пытался получить F3 на OSX 10.7 -GET /
«Маршрут будет работать, но неGET /foo
«Поскольку f3 index.php был в поддире для Localhost/F3. Мое решение было:
- Убедитесь, что .htaccess был установлен, как и у вас.
- Убедитесь, что mod_rewrite.so был включен в httpd.conf от Apache.
- Убедитесь, что вы установили
AllowOverride
All
(У меня не было) для вашего веб -каталога на httpd.conf (дальше вниз по файлу). - перезапустить Apache
Без шага 3 Apache игнорирует любые директивы переписывания. Я обнаружил это, изменяя постоянные ссылки на локальной установке WordPress, и они не удалось указать, что проблема была конфигурацией Apache, а не F3.
Я запускаю это со стеком MAMP. Я переименовал их папку от «Fatfree-Master» до «F3». Я положил эту папку рядом с HTDOCS. Их файл .htaccess (теперь внутри MAMP/F3/LIB) остается нетронутым.
Мой .htaccess (в моей веб -подпапке) является стандартом запаса в соответствии с их примером:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]
Надеюсь, это кому -то поможет.