php - 如何创建这样的 ".htaccess"文件?

标签 php apache .htaccess

我正在尝试创建一个 .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) 我想要如下所有 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)。

那么上面所有的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/

相关文章:

php - 如何获取 PHP Codesniffer 规则集的所有 key 以与 Sonar 一起使用?

php - Apache2 不会自动找到索引页

apache - 如何让 htaccess 加载没有文件扩展名的页面

php - php-ews 中的 DistinguishedFolderId->Mailbox->EmailAddress 是什么?

php - 使用 PDO 执行高级搜索查询的问题

php - 一般来说,如何优化多层应用程序的性能

php - 在 Apache 服务器上配置 Symfony 5 应用程序

php - Codeigniter htaccess 删除 index.php 和 www

php - security.yml 中的未加引号的值中不能使用冒号

apache - 安装 SSL 证书 - Google Compute Engine VM