hosting kurulumları için CakePHP'de .htaccess / mod_rewrite'ın sabitleme

8 Cevap php

I'm trying to install cakePHP on a shared hosting setup. After extracting the files to a location like ~/public_html/dev/cake and visiting the appropriate URL (in this case http://hostname/~username/dev/cake/), I receive a 404 error:


Not Found

The requested URL /usr/home/username/public_html/dev/cake/app/webroot/ was not found on this server.


Bunun için nedeni yakından incelenirse, için mutlak yol ~/public_html aslında /usr/home/username/public_html olmadığını, daha ziyade /usr/www/users/username/ şüpheleniyoruz.

Here's what I've been trying (but obviously it's not working): (~/public_html/dev/cake/app/webroot/.htaccess)

<IfModule mod_rewrite.c>  
    RewriteEngine On  
    RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]  
</IfModule>

Ne yazık ki, bu bir şey değiştirmek için görünmüyor (404 mesaj aynı kalır). Düşünceler?

8 Cevap

Gelmemeliyim

RewriteBase /usr/www/users/username/dev/cake/app/webroot/

olmak

RewriteBase /~username/dev/cake/

RewriteBase sanal olanları gerçek adresler haritalama umurunda, ve ben ne istediğinizi düşünüyorum.

Sadece ben kod gördüm çünkü modülünün yüklü oldu ama görünüşe göre etkin olmadığını işaret etmek istiyorum!

SSH bunu etkinleştirmek için (terminali) aşağıdaki komutu yazın

sudo a2enmod rewrite

Aşağıdaki komutu listede görünüyorsa, o zaman yüklü, aktif olan tüm modülleri göstermektedir.

apache2ctl -M

Ile sunucuyu yeniden başlatmak için emin olun ...

service apache2 restart

PhpCake şimdi çalışmaya başlamalıdır.

Neden sadece dosyaları ayıklamak değil /usr/www/users/username/?

i. htaccess size (linux içinde bir kısayol şeydir) ev klasörüne atıfta ki '~' okuma ve düşünme olduğunu düşünüyorum.

app çalışan almak için en hızlı yolu cake config / core.php ve yeniden yazma (bazı şeyler yorumsuz ve bazı. htaccess dosyasını silmek için u söyler) devre dışı bırakmak kullanımına gitmektir. Bir diğer yol da. htaccess düzenlemek ve her nasılsa '~' ev dizinine atıfta değildir bunu anlatmaktır. belki basit bir \ çalışacaktır.

Sen yanlış bir dosyayı değiştirerek ediyoruz. Değiştirmeniz gereken. Htaccess dosyası / dev bulunursa, / dev / kek / app / webroot / .htaccess içinde birini değiştirerek olmamalı

Ben çifti hosting ve ben yeniden yazma kuralları, işe almak mümkün ama, ben HTML-> link sayfalarında tüm bağlantıların sıralama parametreleri alma ile ilgili sorunlar yaşıyorum. Aynı kod sorunlara neden benim yerel makine çalışırken pencere ancak sıralama çift ya da çok fazla sorgu parametreleri (Düzenle veya Update sayfalar) iyi çalışır.

Ben resmi CakePHP Cockbook gelen 'ileri kurulumu' ile benzer bir sorun vardı. Birkaç saat sonra o çalışma başardı.

OS: Mac OS X

Cake core directory: /usr/lib/cake
My application app directory: /Users/myuser/dev/myapp
My application webroot directory: /Users/myuser/Sites/myapp

/Users/myuser/Sites/myapp/index.php modifikasyonu

if (!defined('ROOT')) {
    define('ROOT', DS.'Users'.DS.'myuser'.DS.'dev');
}
if (!defined('APP_DIR')) {
    define('APP_DIR', 'myapp');
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib');
}

/Users/myuser/Sites/myapp/.htaccess modifikasyonu

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /~myuser/myapp/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

/Users/myuser/dev/myapp/.htaccess olarak - bu dosya bu yapılandırmada gerekli değildir bu yüzden silindi. Bu yapılandırma ile en zor kısmı Apache mod_rewrite sağlıyor. Mac düzenleme üzerinde /private/etc/apache2/httpd.conf (bu görev için) anlamsız gibi görünüyor. Ek Apache yapılandırma dosyası, her kullanıcı için oluşturulur.

/private/etc/apache2/users/myuser.conf modifikasyonu

<Directory "/Users/myuser/Sites/">
    Options FollowSymLinks
    AllowOverride All
</Directory>

Varsayılan olarak AllowOverride yok olarak ayarlanır, bu nedenle mod_rewrite bu yapılandırmada çalışmaz.

Bu değişiklikleri sonra http://localhost/~myuser/myapp düzgün çalışır.

PS. Tmp dizini için Hızlı izni düzeltme.

sudo chgrp -R www /Users/myuser/dev/myapp/tmp
sudo chmod -R g+w /Users/myuser/dev/myapp/tmp

Evet, aşağıdaki dosyaların DOCUMENT_ROOT yol vermek zorunda. Doğru DOCUMENT_ROOT yol almak için sunucu phpinfo () bakın. Bu var/www/html/ gibi bir şey olmalıdır.

  1. . Kök (app, kek, satıcılar dizinleri dışında) / dizininde htaccess

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$ ) DOCUMENT_ROOT/app/webroot/    [L]
        RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1 [L]
    </IfModule>
    
  2. . /app dizini içindeki htaccess

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    DOCUMENT_ROOT/app/webroot/    [L]
        RewriteRule    (.*) DOCUMENT_ROOT/app/webroot/$1    [L]
    </IfModule>
    
  3. . /app/webroot dizini içindeki htaccess

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ DOCUMENT_ROOT/app/webroot/index.php?url=$1 [QSA,L]
    </IfModule>
    

Bu benim için çalıştı.