繁体   English   中英

.htaccess mod重写需要帮助

[英].htaccess mod rewrite help needed

我已经写了这段小代码。 我对此很陌生,所以我不确定这是否正确。 但基本上,它使我可以使用php扩展名访问网址。 当人们进入网站时,他们将从地理IP页面重定向到正确的语言,如下所示

main.php?lang = uk或nl或en或eu等。

现在我也可以像这样使用它

main /?lang = uk或nl或en或eu等。

我希望也可以删除url?lang = uk中的变量。

我该怎么做。 我的.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>

也非常感谢任何愿意提供帮助的人。

RewriteRule的第一个参数确实匹配域名和前缀*之后以及任何查询字符串(如果存在)之前的任何内容。 http://localhost/this/is/my/test?lang=123this/is/目录中带有.htaccess文件的this/is/ ,它将与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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM