我正在尝试创建一个 .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]

最佳答案

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

关于php - 如何创建这样的 ".htaccess"文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31676703/

10-14 13:16
查看更多