2016-02-08 44 views
2

我遇到一些与我的.htaccess文件存在问题,存储在我的网站的根级别。.htaccess将不会正确重写

我要重写以下

  1. mysite.com执行mysite.com/index.php?lang=en但重写URL到mysite.com/en/
  2. mysite.com/en (没有结尾的斜线)不与上述相同的
  3. mysite.com/en/blog/page执行mysite.com/blog/page?lang=en

概括地说,该语言添加到URL,打开index.php与.com,.com/en或.com/en /,a第二剥离文件扩展名

下面是引用完整的文件:

RewriteEngine on 

# Redirect to domain without www. 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule .* http://%1%{REQUEST_URI} [R=301,L] 
# Same for HTTPS: 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule .* https://%1%{REQUEST_URI} [R=301,L] 

# Stop hotlinking. 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} ^https?://([^/]+)/ [NC] 
RewriteCond %1#%{HTTP_HOST} !^(.+)#\1$ 
RewriteRule \.(jpg|jpeg|png|gif|svg)$ - [NC,F,L] 

# Prevent directory listings 
Options All -Indexes 

# Request language from URL 
# empty url -> redirect to en/ 
RewriteCond %{QUERY_STRING} !lang=(en|de) 
RewriteRule ^$ en/ [R=301,L] 

# now all urls have en/ de/ -> parse them 
RewriteRule ^(en|de)/(.*)$ $2?lang=$1&%{query_STRING} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

完全公开,它已经全部采取了从各种谷歌的结果,我很欣赏它,也许可以做得更好。

因为它的立场,mysite.com给我

请求的URL /home/towrafvk/public_html/en/.php此服务器上找到。

mysite.com/en给我

请求的URL /en.php此服务器上找到。

mysite.com/en/并按预期

我知道这个问题是mysite.com/en/blog/page都工作在第三到最后一个和第二个到最后重写规则。我怎样才能解决这个问题?

回答

1
RewriteEngine on 

# Redirect to domain http(s) without www. 
RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC] 
RewriteRule^http%2://%1%{REQUEST_URI} [NE,L,R=301] 

# Stop hotlinking. 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} ^https?://([^/]+)/ [NC] 
RewriteCond %1#%{HTTP_HOST} !^(.+)#\1$ 
RewriteRule \.(jpg|jpeg|png|gif|svg)$ - [NC,F,L] 

# Prevent directory listings 
Options All -Indexes 

# Request language from URL 
# empty url -> redirect to en/ 
RewriteCond %{QUERY_STRING} !lang=(en|de) 
RewriteRule ^$ en/ [R=301,L] 

# now all urls have en/ de/ -> parse them 
RewriteRule ^(en|de)/(.*)$ $2?lang=$1 [L,QSA] 

# Use .php file only if not exist without and exist with .php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+)/?$ $1.php [L]