【问题标题】:Set language using htaccess URLrewrite使用 htaccess URLrewrite 设置语言
【发布时间】:2013-09-28 10:41:46
【问题描述】:

例如,我的根目录中有两个文件:one.phptwo.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 你应该发布你的更新作为答案,因为它就是答案。

标签: .htaccess url-rewriting seo


【解决方案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 则不会加载
猜你喜欢
  • 2019-03-06
  • 2018-12-21
  • 2017-08-08
  • 1970-01-01
  • 2021-01-31
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多