2016-08-16 8 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のようなURLを変更した場合、それは機能します。

私は下のリストからこのルールは仕事ではないと思いますか?

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

なぜ私は間違っているのですか?

これらは私のApache用のロードされたすべてのモジュールです:

​​

そして、これは、/ etc/apache2の/サイト対応の私domain.dev.confファイルです:

<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

関連する問題