problema de configuração em relação ao arquivo .htaccess no Ubuntu

1

Estou construindo um aplicativo de camiseta que tenho seguindo a configuração em

/ 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>

e seguindo no arquivo .htaccess no local

/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/ [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?)$  [R=301,L]
# Rewrite category pages
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=&CategoryId=&Page= [L]
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/?$ index.php?DepartmentId=&CategoryId= [L]
# Rewrite department pages
RewriteRule ^.*-d([0-9]+)/page-([0-9]+)/?$ index.php?DepartmentId=&Page= [L]
RewriteRule ^.*-d([0-9]+)/?$ index.php?DepartmentId= [L]
# Rewrite subpages of the home page
RewriteRule ^page-([0-9]+)/?$ index.php?Page= [L]
# Rewrite product details pages
RewriteRule ^.*-p([0-9]+)/?$ index.php?ProductId= [L]
</IfModule>

o site está trabalhando em localhost e está funcionando como se não houvesse regra de .htaccess especificada ou seja, se eu visualizasse uma página como

 http://localhost/tshirtshop/nature-d2

então eu recebo um erro 404, mas se eu ver a mesma página como

http://localhost/tshirtshop/index.php?DepartmentId=2

então eu posso ver isso.

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

Qual é o erro se alguém pode apontar na configuração acima, senão eu preciso verificar alguma coisa?

    
por Registered User 28.06.2013 / 17:12

2 respostas

1

Eu consegui resolver problemas, o que acontece é quando você instala o Ubuntu e usa o apache2 nele existe um site padrão que é ativado assim que o apache2 é instalado no ubuntu

para que o site padrão ativo esteja

/etc/apache2/sites-enabled/000-default

o que acontece é que eu tenho 2 arquivos no diretório habilitado para sites

/etc/apache2/sites-enabled/tshirshop  
/etc/apache2/sites-enabled/000-default

quando o Apache do Ubuntu carrega os vhosts do diretório habilitado para sites

carrega as configurações do vhost em ordem alfabética so 000-default foi carregado antes do site e em 000-default existe uma linha que segue

DocumentRoot /var/www
<Directory /var/www/>
            AllowOverride None
</Directory>

Razões pelas quais minha configuração não estava funcionando 1) Observe que o AllowOverride None in 000-default estava recebendo prioridade sobre AllowOverride all no tshirtshop (carregamento alfabético de vhosts), então essa foi a razão pela qual meu arquivo .htaccess não foi carregado, já que a configuração do site 000-default foi carregada antes de ler a camiseta vhost e já carregava uma linha AllowOverride None 2) No meu arquivo / etc / apache2 / sites-enabled / tshirshop eu escrevi

DocumentRoot /var/www/tshirtshop

e estava acessando o aplicativo como

http://localhost/tshirtshop

então eu mudei DocumentRoot do vhost tshirtshop

DocumentRoot /var/www/tshirtshop

para

 DocumentRoot /var/www

e desativado o site padrão do apache do Ubuntu

sudo a2dissite default

Agora, minha configuração de / etc / apache2 / sites-enabled / tshirtshop está sendo lida e aplicada. Agora, meu arquivo .htaccess está sendo respeitado.

    
por Registered User 30.06.2013 / 09:20
0

Não tenho certeza se esta é uma questão relacionada ao Ubuntu e deve ser feita aqui.

Mas aqui está o problema que vejo. Você está acessando o site via http://localhost/tshirtshop , enquanto o documentRoot e o diretório do seu arquivo /etc/apache2/sites-enabled/tshirtshop têm /var/www/tshirtshop . Isso significa que este arquivo não é usado como a configuração para o host local - de acordo com esses valores, o site deve ser acessado a partir de apenas http://localhost not http://localhost/tshirtshop .

Isso pode acontecer se o arquivo não tiver sido criado na pasta /etc/apache2/sites-available e ativado no terminal (o que criaria um link simbólico para sites habilitados) depois que o padrão foi desabilitado.

Eu não sei os comandos enable e disable, já que eu uso o webmin para lidar com a configuração de sites de teste locais para mim. Em seguida, edite meu arquivo /etc/hosts para poder acessar em algo mais próximo da URL real em vez de localhost.

Mas voltando ao problema, usar a URL incorreta faz com que seu rewriteRule reescreva para hhtp://localhost/index.php?DepartmentId=2 , o que seria correto se o site fosse acessado apenas por http://localhost e não http://localhost/tshirtshop . Agora você pode ver porque você recebeu um erro 404.

    
por chesedo 29.06.2013 / 22:22