2016-08-16 74 views
0

我有一個站點使用.htaccess來重寫規則,但soem不起作用。Linux Mint - Apache 2.4 .htaccess rewriteRule不起作用

這是我的.htaccess文件:

RewriteEngine On 
RewriteBase/
# Inicio 
RewriteRule ^inicio|home|index$ index.php [QSA,L] 

# Paginacion amigable 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)\.([0-9]+)$ $1?pag=$2 [QSA,L] 

# Miniaturas 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*\/)?tdd([A-Za-z0-9_~-]*)\/(.*)$ imagen.php?param=$2&src=$1$3 [QSA,L] 

#paginas 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*-p([0-9]+)$ interna.php?id=$1 [QSA] 

#Intranet 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*-i([0-9]+)$ intranet.php?id=$1 [QSA] 

#publicaciones 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*-n([0-9]+)$ publicaciones_detalle.php?id=$1 [QSA] 

# Paginas sin extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ $1.php [QSA] 

# sitemap 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule sitemap.xml sitemap.php [QSA] 

# Buscador 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^search$ buscar.php [QSA] 



# En caso de no existencia 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ 404.php [QSA] 

# Paginas incluidas en el template 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} ^.*\.php$ 
RewriteRule ^(.*)$ plantilla.php?uri=$1 [QSA] 

但我有例如錯誤,當我訪問www.domain.com/contacto 它拋出我這個錯誤:

Not Found 

The requested URL /contacto was not found on this server. 

但如果我改變這樣的網址www.domain.com/contacto.php它的作品。

我覺得這個從底部列表中的規則應該做的工作是不是?

# Paginas sin extension 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)$ $1.php [QSA] 

爲什麼我做錯了?

這些加載我的Apache的所有模塊:

​​

這是對我的domain.dev.conf文件/ etc /啓用站點的Apache2 /:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html/domain/ 
    ServerAlias www.domain.dev 
    ServerName domain.dev 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
    <Directory /var/www/html/domain> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride All 
       Order allow,deny 
       allow from all 
       RewriteEngine On 
    </Directory> 
</VirtualHost> 

這是在Apache 2.2上工作正常,但升級到2.4後停止工作。

是否有應用htaccess中

形式的Apache 2和2.4之間的差異謝謝

+0

'planntilla.php'規則塊的用途是什麼?目前狀態是,如果你請求'/ foo'並且'/ foo'存在並且請求文件名是'/.*.php',那麼重寫'plantilla.php' - 這是沒有意義的。 –

+0

Plantilla.php就像一個模板。所有其他頁面都在該文件中回顯 – juanpscotto

回答

0

添加此規則採取.PHP的照顧。

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L] 
+0

Nop。這是行不通的。 – juanpscotto

0

更改此塊:

# Paginas sin extension 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ $1.php [QSA] 

這樣:

# Paginas sin extension 
# (if exists) 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ $1.php [QSA,L] 

對於增強並秉承DRY principle的目的,用下面的代碼替換整個.htaccess文件相反:

RewriteEngine On 
RewriteBase/

# Ignorar archivos y directorios 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [END] 

# Inicio 
RewriteRule ^inicio|home|index$ index.php [QSA,L] 

# Paginacion amigable 
RewriteRule ^(.+).(\d+)$ $1?pag=$2 [QSA,L] 

# Miniaturas 
RewriteRule ^(.*/)?tdd([A-Za-z0-9_~-]*)/(.*)$ imagen.php?param=$2&src=$1$3 [QSA,L] 

# paginas 
RewriteRule ^.*-p(\d+)$ interna.php?id=$1 [QSA,L] 

# Intranet 
RewriteRule ^.*-i(\d+)$ intranet.php?id=$1 [QSA,L] 

# Publicaciones 
RewriteRule ^.*-n(\d+)$ publicaciones_detalle.php?id=$1 [QSA,L] 

# sitemap 
RewriteRule ^sitemap.xml$ sitemap.php [QSA,L] 

# Buscador 
RewriteRule ^search$ buscar.php [QSA,L] 

# Paginas incluidas en el template 
# RewriteCond %{REQUEST_FILENAME} -f 
# RewriteCond %{REQUEST_FILENAME} ^.*\.php$ 
# RewriteRule ^(.*)$ plantilla.php?uri=$1 [QSA] 

# Paginas sin extension 
# (En caso de existencia) 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ $1.php [QSA,L] 

# En caso de no existencia 
RewriteRule ^.*$ 404.php [QSA] 

在那裏,我已經刪除了所有對條件的重複引用,這些條件檢查請求是否與現有文件或文件夾匹配 - 您只需確實需要這樣做一次,然後在匹配時停止重寫。爲了安全起見,我建議關閉目錄(通過刪除第6行:RewriteCond %{REQUEST_FILENAME} -d)。

正如你所看到的,我已經評論過我在你的原始問題的評論中提到的塊,因爲它似乎沒有特定的功能 - 你需要修復它才能使其工作。

+0

嗨,謝謝你的回覆。我已經嘗試過,但我得到了第一個404錯誤。我不明白它在Apache 2上。2它工作正常。現在我已更新到2.4並停止工作 – juanpscotto

相關問題