在末尾

时间:2017-09-10 10:38:38

标签: php apache .htaccess mod-rewrite url-rewriting

您好我有一个网站,其中我使用某些规则来使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上运行。

1 个答案:

答案 0 :(得分:1)

  1. 在重写之前有重定向规则。
  2. 在.htaccess中添加.php扩展程序之前,请检查是否存在相应的.php文件。
  3. 有这样的话:

    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]
    

    完全清除浏览器缓存后进行测试。