【问题标题】:How to create a ".htaccess" file like this?如何创建这样的“.htaccess”文件?
【发布时间】:2015-10-19 00:46:33
【问题描述】:

我正在尝试创建一个.htaccess,但我们遇到了一些困难。

以下是我需要的示例,记住所有内容都必须在同一个 URL 上。

1) 每当用户访问网站时,都需要在 URL 的末尾添加 /home/

Before: http://app.meusite.com/ 
After: http://app.meusite.com/home/

2) 我希望将所有 URL 都删除 .php

Before: http://app.meusite.com/login.php
After: http://app.meusite.com/login/

3) 我想要的所有网址如下:

之前:

http://app.meusite.com/usuario-adicionar.php
http://app.meusite.com/usuario-editar.php
http://app.meusite.com/usuario-excluir.php

之后:

http://app.meusite.com/usuario/adicionar/
http://app.meusite.com/usuario/editar/
http://app.meusite.com/usuario/excluir/

只是需要考虑的一个注释......

因为整个网站是多语言的,所以必须都接受参数页面会得到LANG = LANGUAGE(例如:lang = en_US)。

那么以上所有的 URL,也必须接受 GET 封号,并希望保持如下:

http://app.meusite.com/index.php?lang=en_US
http://app.meusite.com/home/en_US/

http://app.meusite.com/login.php?lang=en_US
http://app.meusite.com/login/en_US/

http://app.meusite.com/usuario-adicionar.php?lang=en_US
http://app.meusite.com/usuario/adicionar/en_US/

http://app.meusite.com/usuario-editar.php?lang=en_US
http://app.meusite.com/usuario/editar/en_US/

http://app.meusite.com/usuario-excluir.php?lang=en_US
http://app.meusite.com/usuario/excluir/en_US/

我希望它能理解我的问题。还有,你能帮我做吗?

下面,我的尝试:

Options -MultiViews
Options +FollowSymLinks
RewriteEngine on

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^home\/?(.*)\/?$ index.php?lang=$1 [L]
RewriteRule ^([^/]*)\/?(.*)\/?$ $1.php?lang=$2 [L]
RewriteRule ^([^/]*)\/([^/]*)\/([^/]*)\/?$ $1-$2.php?lang=$3 [L]

【问题讨论】:

    标签: php apache .htaccess


    【解决方案1】:

    在删除文件扩展名之前,您需要先确保 MultiViews 已打开。此外,如果您担心搜索引擎可能会将您的页面索引为重复内容,您应该在 HTML 头部中包含一个规范的元标记,描述您希望链接的外观。它应该是这样的:

    <link rel="canonical" href="http://example.com/post/post-title/">
    

    要去掉文件扩展名并添加正斜杠,您需要这段代码。

    #turn on Multiviews if not already turned on
    Options +MultiViews
    
    #takes off the .php
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/$ $1.php
    RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
    
    #adds the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ /$1/ [R=301,L]
    

    我从这里学到了这一点,并成功地在我自己的 .htaccess 文件中使用了该代码。我还没有弄清楚如何处理您问题的多语言方面。我从来没有遇到过这个问题。但是我会在我睡得更好的时候做一些研究,如果我发现任何有用的东西就回到这里。感觉答案就在我眼前。

    一旦你解决了这个问题,别忘了做你的 301 重定向。

    【讨论】:

      猜你喜欢
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多