我已经写了这小段代码。我对此非常陌生,所以我不确定它是否都是正确的。但基本上它允许我使用php扩展名访问urls。当人们进入网站时,他们会从地理ip页面被重定向到正确的语言,如下所示
main.php?lang=uk或nl或en或eu等。
现在我也可以像这样使用它
main/?lang=uk或nl或en或eu等。
我希望能够也删除在网址?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>
也感谢任何愿意提供帮助的人。
发布于 2014-11-23 15:56:20
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]
https://stackoverflow.com/questions/27080892
复制相似问题