如何创建这样的“.htaccess”文件?

时间:2015-07-28 12:44:37

标签: php apache .htaccess

我正在尝试制作.htaccess,但我们遇到了一些困难。

以下是我需要的示例,记住一切都必须在同一个网址上。

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

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

2)我希望所有网址都被移除.php

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

3)我想要所有的URL如下:

之前:

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)。

然后上面的所有网址,也必须接受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]

1 个答案:

答案 0 :(得分:0)

在删除文件扩展名之前,首先需要确保打开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重定向。