Я сейчас ищу, как включить файлы .htaccess в MAMP 2.1.2.

У меня есть следующие настройки:

httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so
...
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
# MAMP DOCUMENT_ROOT !! Don't remove this line !!
DocumentRoot "/Applications/MAMP/htdocs"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/Applications/MAMP/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.2/mod/core.html#options
    # for more information.
    #
    Options All

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all

</Directory>
...
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride 
# directive.
#
AccessFileName .htaccess

Файл .htaccess (уже работает на веб-сайте):

RewriteEngine on
RewriteRule ^([a-z\-]+)$ /index.php?page=$1 [L]

И вывод страницы при переходе к /foo

Not Found

The requested URL /index.php was not found on this server.

Я попытался добавить следующую строку в файл .htaccess, потому что мой сайт включен: localhost/mysite/, но не имел никакого эффекта.

RewriteBase /mysite/

Доступ к localhost/mysite/index.php?page = foo работает ..

есть идеи?

3 ответа3

1

Здесь вы используете 2 функции Apache:

  1. Файлы .htaccess, которые управляются директивами AllowOverride .
  2. rewrite_mod, который является модулем Apache.

Чтобы включить управление файлами .htaccess, вам необходимо настроить директиву AllowOverride . Также убедитесь, что AccessFileName не изменен (в противном случае вам следует переименовать файл .htaccess в файл, настроенный в этой директиве.

Чтобы использовать перезапись URL, необходимо загрузить модуль rewrite_mod .

Когда вы получаете ошибку 404, это указывает на то, что прямое AllowOverride настроено неправильно. После, если вы получаете ошибку 500, это означает, что в содержимом .htaccess (то есть в вашей конфигурации перезаписи) есть ошибка.

Чтобы получить более подробную информацию об операциях перезаписи, вы также можете взглянуть на директиву RewriteLog .

Удачи !

0
vi /etc/hosts

Здесь вы должны увидеть имя локального сервера.

Затем сделайте:

vi /etc/apache2/sites-avaiable/000-default.conf

Вместо 000-default.conf вы можете найти что-то похожее. Ваш сайт настроен здесь? Вы должны увидеть здесь что-то вроде:

<VirtualHost *:80>
ServerName localhost

    ServerAdmin webmaster@localhost
    DocumentRoot /Applications/MAMP/htdocs
            <Directory />
                            Order Deny,Allow
                            Deny from all
                            Options None
                            AllowOverride None
            </Directory>
            <Directory /Applications/MAMP/htdocs>
                            Options +FollowSymLinks +MultiViews
                            AllowOverride All
                            Order allow,deny
                            allow from all
                            Require all granted
            </Directory>

</VirtualHost>

У вас может не быть никакого AllowOverride none здесь.

Обновить:

Я думаю, что нашел проблему. Когда вы делаете:

RewriteEngine on
RewriteRule ^([a-z\-]+)$ /index.php?page=$1 [L]

Вы не разрешаете / в регулярном выражении. Так что попробуйте это:

RewriteEngine on
RewriteRule ^(mysite/)?([a-z\-]+)$ /$1index.php?page=$1 [L]

или же

RewriteEngine on
RewriteRule ^([a-z\-]+)/([a-z\-]+)$ /$1/index.php?page=$2 [L]

Теперь он должен работать для вас на вашем локальном хосте.

-1

В конце концов я обнаружил, что проблема была не в конфигурации сервера. Проблема была в файле .htaccess.

Я изменился:

RewriteEngine on
RewriteRule ^([a-z\-]+)$ /index.php?page=$1 [L]

Для того, чтобы:

RewriteEngine on
RewriteRule ^([a-z\-]+)$ index.php?page=$1 [L]

И это сделало работу.

Спасибо за помощь, ребята!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .