301重定向而不是302重定向

时间:2018-11-08 15:31:05

标签: php .htaccess redirect

到目前为止,我已在本地使用此代码(工作正常)。

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文件中。但是我还有三个子文件夹,例如关于,代理,隐私。

我将此代码用于

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

  2. 添加斜杠

  3. 删除多个斜杠

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

(注意:同一内容也适用于子文件夹内的所有页面)

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

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

有人请帮助我吗?

1 个答案:

答案 0 :(得分:0)

您的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]