我正在尝试以下规则从文件名中删除文件扩展名,但问题是它显示它已被删除但是当我再次登录时它没有重定向到我的主页。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase \
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
谢谢
答案 0 :(得分:1)
在重定向中,只需输入没有扩展名的页面名称,例如。 标题('位置:索引'); 或 redirect_user('index'); 并在.htaccess文件中使用以下代码。现在浏览器上的链接会说“localhost / index”
RewriteEngine on
RewriteRule ^([^./]{3}[^.]*)$ /index.php?page=$1 [QSA,L]
答案 1 :(得分:1)
我认为你的规则有点偏。您正在使用THE_REQUEST
将php扩展名重定向到非php扩展名,但您在重写文件中没有使用/
之后的%1
,因此当读取下一条规则时它不匹配,因为它将匹配如果该规则中有/
,则仅在内部重定向。因此,要么在第二个规则中的%1之后添加正斜杠,要么在最后一个规则中选择反斜杠。我会在最后一条规则中使它成为可选项,因此它将匹配任一方式。
尝试此更新,看看它是如何工作的。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ /([^&\ ]+).php [NC]
RewriteRule ^ /%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [NC,L]