Я создаю приложение tshirtshop. У меня есть следующая конфигурация в
/ etc / apache2 / sites-enabled / tshirtshop
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/tshirtshop
<Directory /var/www/tshirtshop>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
и следующая в файле .htaccess в папке
/var/www/tshirtshop/.htaccess
<IfModule mod_rewrite.c>
# Enable mod_rewrite
RewriteEngine On
# Specify the folder in which the application resides.
# Use / if the application is in the root.
RewriteBase /tshirtshop
#RewriteBase /
# Rewrite to correct domain to avoid canonicalization problems
# RewriteCond %{HTTP_HOST} !^www\.example\.com
# RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
# Rewrite URLs ending in /index.php or /index.html to /
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP
RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L]
# Rewrite category pages
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=$1&CategoryId=$2&Page=$3 [L]
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/?$ index.php?DepartmentId=$1&CategoryId=$2 [L]
# Rewrite department pages
RewriteRule ^.*-d([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=$1&Page=$2 [L]
RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId=$1 [L]
# Rewrite subpages of the home page
RewriteRule ^page-([0-9]+)/?$ index.php?Page=$1 [L]
# Rewrite product details pages
RewriteRule ^.*-p([0-9]+)/?$ index.php?ProductId=$1 [L]
</IfModule>
сайт работает на localhost и работает так, как будто не задано правило .htaccess, т. Е. Если бы я просматривал страницу как
] http://localhost/tshirtshop/nature-d2
, тогда я получаю сообщение об ошибке 404, но если я просматриваю ту же страницу, что и
http://localhost/tshirtshop/index.php?DepartmentId=2
, то я могу ее просмотреть.
sudo apache2ctl -M
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK
В чем заключается ошибка, если кто-либо может указать на приведенную выше конфигурацию, или же мне нужно проверить что-то еще?
Я не уверен, является ли это вопросом, связанным с Ubuntu, и его следует задать здесь.
1111 Но вот проблема, которую я вижу. Вы заходите на сайт черезhttp://localhost/tshirtshop
, в то время как documentRoot и каталог вашего файла /etc/apache2/sites-enabled/tshirtshop
имеют /var/www/tshirtshop
. Это означает, что этот файл не используется в качестве конфигурации для localhost - в соответствии с этими значениями сайт должен быть доступен только из http://localhost
, а не http://localhost/tshirtshop
.
Это может произойти, если файл не был создан в папке /etc/apache2/sites-available
, а затем включен в терминале (что создаст символическую ссылку на сайты с поддержкой) после отключения по умолчанию.
Я не знаю команд включения и выключения, так как я использую webmin для управления настройкой локальных тестовых сайтов для меня. А затем отредактируйте мой /etc/hosts
файл, чтобы иметь возможность доступа к чему-то более близкому к реальному URL, а не к локальному.
Но возвращаясь к проблеме, использование неправильного URL приводит к тому, что rewriteRule переписывает в hhtp://localhost/index.php?DepartmentId=2
, что было бы правильно, если бы доступ к сайту осуществлялся только через http://localhost
, а не http://localhost/tshirtshop
. Теперь вы можете понять, почему вы получаете ошибку 404.
Я смог решить проблему, что происходит, когда Вы устанавливаете Ubuntu и используете apache2 в ней существует веб-сайт по умолчанию, который активируется, как только apache2 установлен в человечности
так, чтобы веб-сайт по умолчанию, который активен, был
/etc/apache2/sites-enabled/000-default
то, что происходит, у меня есть 2 файла в поддерживающем сайты каталоге
/etc/apache2/sites-enabled/tshirshop
/etc/apache2/sites-enabled/000-default
когда Apache Ubuntu загружает vhosts из поддерживающего сайты каталога
это загружается, vhost конфигурации, в алфавитном порядке настолько с 000 значениями по умолчанию, был загружен прежде tshirtshop и в с 000 значениями по умолчанию существует строка, которая следует
DocumentRoot /var/www
<Directory /var/www/>
AllowOverride None
</Directory>
Обосновывает, что моя конфигурация не работала 1) Примечание AllowOverride None
в с 000 значениями по умолчанию заканчивал приоритет AllowOverride all
в tshirtshop (алфавитная загрузка vhosts), таким образом, это было причиной, мой .htaccess файл не был загружен, так как конфигурация сайта с 000 значениями по умолчанию была загружена прежде, чем считать tshirtshop vhost, и это уже несло строку AllowOverride None
2) В моем/etc/apache2/sites-enabled/tshirshop файл я записал
DocumentRoot /var/www/tshirtshop
и получал доступ к приложению как
http://localhost/tshirtshop
таким образом, я изменил DocumentRoot vhost tshirtshop
DocumentRoot /var/www/tshirtshop
кому:
DocumentRoot /var/www
и отключенный сайт по умолчанию апача Ubuntu
sudo a2dissite default
Теперь моя конфигурация/etc/apache2/sites-enabled/tshirtshop читается и относится. Таким образом, теперь мой .htaccess файл уважают.