2014-11-22 34 views
0

我写了这一小段代码。我对此很新,所以我不确定这是否正确。但基本上它让我用php扩展访问url。当人们在网站上,他们正在从地理IP页面重定向到喜欢看起来像这样的.htaccess国防部重写帮助需要

main.php?LANG =英国或荷兰或EN或欧盟等

现在正确的语言我也可以使用它像这样

主/?LANG =英国或荷兰或EN或欧盟等

我希望能够还去除的网址是什么?LANG =英国变量。

我会怎么做。我的.htaccess代码低于

<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase/
DirectorySlash On 

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L] 

# remove trailing slash 
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L] 
RewriteRule ^([\w\/-]+)(\?.*)?$ $1.php$2 [L,T=application/x-httpd-php] 



</IfModule> 

感谢任何人愿意帮忙。

+0

我做了一个小错误,我只是看看。 main /?lang = uk不起作用,仍然需要main.php?lang = uk。所以总的来说,它应该删除main.php文件中的.php?lang = uk。 – carlosx2 2014-11-22 18:34:51

+0

这正是饼干的用途。 – Sumurai8 2014-11-23 06:52:00

回答

0

RewriteRule第一个参数不匹配的域名和前缀*后,如果存在任何查询字符串的事情之前。在http://localhost/this/is/my/test?lang=123与在this/is/目录.htaccess文件,将匹配my/test。要匹配的查询字符串,你必须使用%{QUERY_STRING}变量。

如果RewriteRule的第二个参数(重写的url)不包含查询字符串,它会自动将原始url的查询字符串追加到新的url。

在下面的代码我使用%{THE_REQUEST}。这是用于提出页面请求的字符串。它的形式是GET /my/resource?query=string HTTP/1.1。重写事物时不会改变,这可以防止无限循环。

在你的PHP文件,确保该语言从cookie而不是一个GET变量读取,然后执行以下操作:

#Set cookie for language 
RewriteCond %{QUERY_STRING} ^(.*?)&?lang=([^&]+)&?(.*?)$ 
RewriteRule^%{REQUEST_URI}?%1&%3 [CO=lang:%2:127.0.0.1:1:/:0:1,R,L] 

#Remove potential prefix or suffix & from query string 
RewriteCond %{QUERY_STRING} ^&(.*?)$ [OR] 
RewriteCond %{QUERY_STRING} ^(.*?)&$ 
RewriteRule^%{REQUEST_URI}?%1 [R,L] 

#External requests with \.php should be without that. 
RewriteCond %{THE_REQUEST} \.php 
RewriteRule ^(.*)\.php$ $1 [R=301,L] 

#Try to load php page if resource does not alreay have an extension 
RewriteCond %{REQUEST_URI} !\.[a-z]+$ 
RewriteRule ^(.*)$ $1.php [L]