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