【发布时间】:2019-04-12 03:40:47
【问题描述】:
到目前为止,我已在本地使用此代码(运行良好)。
RewriteEngine On
Options -Indexes
RewriteBase /projectname/
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L]
# add a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
redirect 301 /projectname/index/ http://localhost/projectname/
redirect 301 /projectname/about/index/ http://localhost/projectname/about/
redirect 301 /projectname/agent/index/ http://localhost/projectname/agent/
redirect 301 /projectname/privacy/index/ http://localhost/projectname/privacy/
RewriteCond %{THE_REQUEST} //
RewriteRule .* $0 [R]
我把它放在根 .htaccess 文件中。但我也有三个子文件夹,例如 about、agent、privacy。
我用这个代码
移除 .php 扩展名(除了所有文件夹中的索引页都包含根目录)。
添加斜杠
删除多个尾随斜杠
删除所有文件夹(包括根文件夹和子文件夹)中的 index.php。
(注意:子文件夹内的所有页面也一样)
但是这些页面是从 302 重定向,然后再重定向 301。 我只需要重定向 301 包括上面指定的所有选项(点)。
请任何人修改这些重定向规则。
有人帮帮我吗?
【问题讨论】:
-
R标志默认为 302。您需要在任何地方指定R=301 -
它与 301 一起工作,但它需要两个 301 重定向...我需要在一个重定向中执行此操作以实现 seo 目的...您能帮我解决这个问题...
-
htaccess 中最后两行的目的是什么?
-
@SarvanKumar 你最终得到了一个重定向链,因为你一个接一个地匹配多个规则。用简化的逻辑查看我的答案
-
最后两行用于删除多个斜线.. @mx0