使用 htaccess URLrewrite 设置语言
Posted
技术标签:
【中文标题】使用 htaccess URLrewrite 设置语言【英文标题】:Set language using htaccess URLrewrite 【发布时间】:2013-09-28 10:41:46 【问题描述】:例如,我的根目录中有两个文件:one.php 和 two.php。我想通过这些 url 访问它们,而不必实际拥有物理目录 en+de。
mydomain.com/en/一个 mydomain.com/en/两个 mydomain.com/de/一个 mydomain.com/de/两个所以第一个目录将被“忽略”,只需将带有语言设置的 GET 变量传递给 php 文件,第二个目录是没有扩展名的 php 文件。
到目前为止,这就是我在 htaccess 中使用的文件扩展名:
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php
更新/解决方案 这很有用:.htaccess rule for language detection 这似乎几乎符合我的要求:
RewriteRule ^(en|de|fr)/(.*)$ $2?lang=$1 [L,QSA]
RewriteRule ^(.*)$ $1?lang=en [L,QSA]
还有一个问题 对于 mydomain.com/en/one/id45 如果我想将 id45 作为变量传递给 one.php 我必须在 htaccess 中添加哪一行?
【问题讨论】:
您的问题不清楚。one.php and two.php
是在根目录中还是在 en/
、de/
文件夹中?
文件在根目录中...我不想在物理上拥有 en+de 文件夹我只需要它们在语言变量的 URL 中
@anubhava:希望这能让它更清楚。
请在您的问题中发布格式正确的代码示例,而不是在它们非常不可读的 cmets 中。
@TomSenner 你应该发布你的更新作为答案,因为它就是答案。
【参考方案1】:
你可以试试这个规则:
DirectoryIndex index.php index.html
DirectorySlash On
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %DOCUMENT_ROOT/$2.php -f
RewriteRule ^(en|de|fr)/([^/]+)(?:/(.*)|)$ $2.php?lang=$1&var=$3 [L,QSA,NC]
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([a-z]2)/?$ index.php?lang=$1 [L,QSA,NC]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([^/]+)/?$ $1?lang=en [L,QSA]
【讨论】:
谢谢,但它会导致“500 内部服务器错误”,也许我的其他代码是错误的:RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.php -f
@987654325 @RewriteRule ^(en|de|fr)/([^/]+)/(.*)$ $2.php?lang=$1&var=$3 [L,QSA,NC]
RewriteRule ^(.*)$ $1?lang=de [L,QSA]
您的代码适用于 mydomain.com/en/one/id45,但我现在将为 mydomain.com/en/one 获得 404,尽管文件 one.php 存在
感谢几乎完美:只有 mydomain.com/en/、mydomain.com/fr/ 等给出 404 错误,而不是使用 index.php
但是目录不存在! mydomain.com/en/one -> 将使用 one.php 作为文件,因此 mydomain.com/en/ 应该使用 one.php 所在目录中的 index.php。 (感谢您的大力帮助)
为什么语言有多个 RewriteRule?以及为什么如果我输入 example.com/en/home 会加载 CSS,但如果我输入 example.com/de/home 则不会加载以上是关于使用 htaccess URLrewrite 设置语言的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess转为web.config的操作技巧 apache伪静态转为iis伪静态