【问题标题】:301 redirection instead of 302 redirection301重定向而不是302重定向
【发布时间】: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。

我用这个代码

  1. 移除 .php 扩展名(除了所有文件夹中的索引页都包含根目录)。

  2. 添加斜杠

  3. 删除多个尾随斜杠

  4. 删除所有文件夹(包括根文件夹和子文件夹)中的 index.php。

(注意:子文件夹内的所有页面也一样)

但是这些页面是从 302 重定向,然后再重定向 301。 我只需要重定向 301 包括上面指定的所有选项(点)。

请任何人修改这些重定向规则。

有人帮帮我吗?

【问题讨论】:

  • R 标志默认为 302。您需要在任何地方指定R=301
  • 它与 301 一起工作,但它需要两个 301 重定向...我需要在一个重定向中执行此操作以实现 seo 目的...您能帮我解决这个问题...
  • htaccess 中最后两行的目的是什么?
  • @SarvanKumar 你最终得到了一个重定向链,因为你一个接一个地匹配多个规则。用简化的逻辑查看我的答案
  • 最后两行用于删除多个斜线.. @mx0

标签: php .htaccess redirect


【解决方案1】:

您的 htaccess 可以通过这种方式简化,以尊重您的标准

DirectoryIndex index.php
Options -MultiViews

RewriteEngine On
RewriteBase /projectname/

# redirect "*/index.php" to "*/"
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/(.+/)?index\.php\s [NC]
RewriteRule ^ %1 [R=301,L]

# redirect "*/page.php" to "*/page/"
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/(.+)\.php\s [NC]
RewriteRule ^ %1/ [R=301,L]

# rewrite back "*/page/" to "*/page.php"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+)/$ $1.php [L]

【讨论】:

  • 如果我这样访问,test/index.php// 它不起作用.. 斜线将是一个...
  • 你为什么要自愿添加额外的斜杠?那没有意义。此外,在这种情况下,默认发送404(未找到)是可以的。子文件夹索引的not working 是什么意思?
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 2012-02-04
  • 2010-12-06
  • 1970-01-01
  • 2011-05-16
  • 2014-08-18
  • 2014-10-25
  • 2020-03-08
相关资源
最近更新 更多