htaccess重写多个文件夹

时间:2018-02-14 21:06:25

标签: .htaccess mod-rewrite

你好,这是我的htaccess文件:

RewriteEngine On
RewriteBase /
#REWRITE QUERY STRINGS!
RewriteCond %{REQUEST_URI} !^/(.*).php
RewriteCond %{REQUEST_URI} !^/(.*).html
RewriteCond %{REQUEST_URI} !^/(.*).js
RewriteCond %{REQUEST_URI} !^/(.*).css
RewriteCond %{REQUEST_URI} !^/(.*).png
RewriteCond %{REQUEST_URI} !^/(.*).bmp
RewriteCond %{REQUEST_URI} !^/(.*).jpg
RewriteCond %{REQUEST_URI} !^/(.*).gif
RewriteCond %{REQUEST_URI} !^/m
RewriteCond %{REQUEST_URI} !^/ar
RewriteCond %{REQUEST_URI} !^/fr
RewriteCond %{REQUEST_URI} !^/tr
RewriteCond %{REQUEST_URI} !^/en
RewriteRule ^(.*)$ /index.php?do=$1 [QSA]

现在我要访问的内容是:domain.com/home就像访问domain.com/index.php?do=home一样好,但是当我尝试访问法语时,例如:domain.com/fr/home它没有#&# 39;工作但是domain.com/fr/index.php?do=home作品你有什么想法我能用tr语言,阿拉伯语和英语来表达这一点。谢谢你 PS:index.php文件位于fr,tr,ar和en文件夹

2 个答案:

答案 0 :(得分:0)

您可能希望在规则之前引入更常规的重写规则:

RewriteEngine On
RewriteBase /
RewriteRule ^/?([a-z]{2})/(.*)/?$ /index.php?lang=$1&do=$2 [END,QSA]
RewriteRule ^/?(.*)/?$ /index.php?do=$1 [END,QSA]

您可能需要以RewriteCond的形式添加一些例外,甚至可以切换到可能语言键的显式命名,而不是([a-z]{2}) ...

如果由于END标志而遇到http状态500(“内部服务器错误”),则可能是您使用的是非常旧版本的apache http服务器并且需要使用{{1而是标志。对于这种情况应该一样。

一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(L样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。只有在您无法控制主机配置(读取:非常便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)的情况下,它们才被支持作为最后一个选项。 )。

答案 1 :(得分:0)

尝试以下代码:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\.(php|html|js|css|png|bmp|jpg|gif)$
RewriteCond %{REQUEST_URI} !^/(m|ar|fr|tr|en)/
RewriteRule ^(.*)$     /index.php?do=$1 [QSA,L]

#three lines above summarize your original code and exclude all request 
# for m,ar,fr,tr,en with / , it means when request to any directory 
# of them

RewriteCond %{REQUEST_URI} ^/(m|ar|fr|tr|en)/(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/(m|ar|fr|tr|en)/index\.php [NC]
RewriteRule ^(.*)/(.*)$    $1/index.php?do=$2 [QSA,L]

# the three lines above will match any request passes the first rule 
# and starts with any of your chosen directories and prevent any loop

如果您要从第二个规则中排除相同的文件扩展名,您也可以将此行RewriteCond %{REQUEST_URI} !\.(php|html|js|css|png|bmp|jpg|gif)$添加到其中