您好我有一个网站,其中我使用某些规则来使URL SEO友好。这是代码:
Options +FollowSymLinks
Options -Multiviews
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)/([0-9]+)/([a-zA-Z0-9_-\s]+)$ /page1.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^([a-zA-Z0-9_-\s]+)/([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1&var2=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-\s]+)$ /page2.php?var1=$1 [L,QSA]
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 404 /404.php
在某些情况下工作正常,但在某些情况下会出现一些错误。
我得到的错误:
1)假设我有 page3.php ,当我选择 www.example.com/page3.php 时,它会显示第3页的内容而不会删除扩展程序来自网址但是当我输入 www.example.com/page3 时,它会将第3页作为变量并显示第2页的内容,因为我已经描述了重写规则第2页的单个变量。
2)如果我将我的网址写为 www.example.com/var1 / ,则会将网址重写为 www.example.com/var1/.php ,但如果我把它写成 www.example.com/var1/var2 / 它工作正常,即删除traling斜线。
如错误1中所述,我首先要将 .php 页面重定向到不带php ,然后将其重定向到我的网址 www.example.com/page3 page3是我的根目录中的一个文件,它显示了page3的内容,如果page3不是我的根目录中的文件,那么它应该将page3作为变量,它应该作为上面提到的重写规则
对于错误2,我想从URL中删除尾部斜杠,无论它是1变量还是2或3或4变量。
请帮帮我...提前致谢...
注意:我在HTTPS上运行我的网站而不是在HTTP上运行。
答案 0 :(得分:1)
.php
扩展程序之前,请检查是否存在相应的.php
文件。有这样的话:
ErrorDocument 404 /404.php
Options +FollowSymLinks -Multiviews
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule ^ - [F,L]
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [NE,R=301,L]
# skip all files and directories from rules below
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [NC,L]
RewriteRule ^([\w-]+)/([\w-]+)/([0-9]+)/([\w-]+)$ page1.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ page2.php?var1=$1&var2=$2&var3=$3 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)$ page2.php?var1=$1&var2=$2 [L,QSA]
RewriteRule ^([\w-]+)$ page2.php?var1=$1 [L,QSA]
完全清除浏览器缓存后进行测试。