htaccess 404在添加尾部斜杠时无法正常工作

时间:2015-05-12 14:37:59

标签: php regex apache .htaccess mod-rewrite

我会尽可能地解释我的问题。

我有一个包含清理网址的网站,该网址通过.htaccess重定向。该网站应该是双语的(fr | en)。 (www.kamelya.ca)

在htaccess的帮助下,我为所有内容添加了一个尾部斜杠(http://kamelya.ca/fr/contact => http://kamelya.ca/fr/contact/等)

我还有一个404 errorHandling重定向到fr / 404.php错误页面。

问题是当我试图处理"虚拟"中的错误页面时文件夹,(级别2和+),它最后添加了很多.php。例如:http://kamelya.ca/fr/qwerty => http://kamelya.ca/fr/qwerty.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php/(此页面不存在,但我想登陆fr / 404.php页面。)

htaccess正确处理第一级(http://kamelya.ca/whateverincorrect => http://kamelya.ca/fr/404.php)但不处理子级别......

这里是htaccess文件(已清理,对不起法国评论:) :):

Options +FollowSymlinks
RewriteEngine On

RewriteBase /

DirectoryIndex index.php

# Error
ErrorDocument 404 /fr/404.php

# Add ending slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ %{REQUEST_URI}/ [R=301,L] 

# (Don't mind thoses next lines until #END, problem isn't here :) )
# Boutique en ligne 
RewriteRule ^(en|fr)/([0-9a-zA-Z+_-]*)-([0-9]*)/$                       $1/boutique.php?cid=$3 [L]
RewriteRule ^(en|fr)/([0-9a-zA-Z+_-]*)/([0-9a-zA-Z+_-]*)-([0-9]*)/$     $1/fiche.php?id=$4 [L]
# Page principales  
RewriteRule ^(en|fr)/acces-client/$             $1/acces-client/ [L]
RewriteRule ^(en|fr)/acces-client/(.*)/$        $1/acces-client/$2.php [L]
RewriteRule ^(en|fr)/boutique-en-ligne/$        $1/boutique.php [L]
# END 

RewriteRule ^(en|fr)/(.*)/(.*)/$                $1/$3.php [L]
RewriteRule ^(en|fr)/(.*)/$                     $1/$2.php [L]
RewriteRule ^(en|fr)/$                          $1/index.php [L]

我知道最后三行是有问题的。 (这是我发现处理多级虚拟文件夹的唯一方法......)

我在服务器上的物理文件结构是:

httpdocs
    .htaccess
    fr (folder)
        - index.php
        - contact.php
        - boutique.php
        - fiche.php
        - etc
    -en (folder) (which isn't complete yet, but will get all same structure as fr)

因此,无论我们处于什么虚拟等级,(等级1,等级2或等级3),所有"真实"文件在" fr"夹。

以下是3个例子:

等级1 - http://kamelya.ca/fr(404 =确定:http://kamelya.ca/frr

等级2 - http://kamelya.ca/fr/contact(404不行:http://kamelya.ca/fr/contactt

等级3 - http://kamelya.ca/fr/a-propos/pourquoi-choisir-kamelya(404不行:http://kamelya.ca/fr/a-propos/pourquoi-choisir-kamelyaa

如果您需要更多说明/解释,请随时提出! (欢迎使用代码更改!)

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

由于你的尾随斜线规则,这种情况正在发生。将该规则更改为:

# Add ending slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^.]+?[^/.]$ %{REQUEST_URI}/ [R=302,L]

如果您的网址中有一个点,这将避免添加尾部斜杠。