7

例如,我的根目录中有两个文件: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 中添加哪一行?

4

1 回答 1

2

你可以试试这个规则:

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]
于 2013-09-24T08:17:28.220 回答