到目前为止,我已在本地使用此代码(工作正常)。
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文件中。但是我还有三个子文件夹,例如关于,代理,隐私。
我将此代码用于 p>
删除.php扩展名(除了所有文件夹的索引页都包含根目录之外)。
添加斜杠
删除多个斜杠
删除所有文件夹(包括根目录和子文件夹)中的index.php。
(注意:同一内容也适用于子文件夹内的所有页面)
但是这些页面从302重定向,然后重定向301。 我只需要重定向301,包括上面指定的所有选项(点)。
任何人都请修改这些重定向规则。
有人请帮助我吗?
答案 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]