简单的网站结构用于PHP GET参数的RewriteRule

时间:2014-12-16 02:52:38

标签: php regex apache .htaccess mod-rewrite

如何重写以下示例?

  

www.domain-name.com/site-name/index.php?lang=en-us&page=home
  www.domain-name.com/site-name/index.php?lang=en-us&page=about
  www.domain-name.com/site-name/index.php?lang=pt-pt&page=inicio
  www.domain-name.com/site-name/index.php?lang=pt-pt&page=sobre

对此:

  

www.domain-name.com/site-name/en-us/home.html
  www.domain-name.com/site-name/en-us/about.html
  www.domain-name.com/site-name/pt-pt/inicio.html
  www.domain-name.com/site-name/pt-pt/sobre.html

我设法获得了参数。这就是我所拥有的:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /site-name/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*?)/?$ index.php?page=$1 [L]
</IfModule>

我不知道如何在所有“页面”参数中添加.html,并且正则表达式真的不是我的东西,所以我很难搞清楚如何“ - ” “ lang ”参数的部分将起作用。我注意到,当输入错误的网址时,网站会变得奇怪。

稍后它将拥有自己的域名,但我想从“ RewriteBase / site-name / ”更改为“ RewriteBase / ”会修复它,对吧?

我对此并不了解,但我认为也缺少一些标志(出于搜索引擎优化目的)。

1 个答案:

答案 0 :(得分:0)

您可以使用:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /site-name/

    RewriteRule ^([^/]+)/(.+?)\.html?$ index.php?lang=$1&page=$2 [NC,L,QSA]
</IfModule>