.htaccess查询字符串和重定向

时间:2017-11-20 08:46:27

标签: php .htaccess

我有 .htaccess

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_URI}  !(\.css|\.js|\.png)$
RewriteRule ^(.*)$ index.php?v=$1 [NC,L,QSA]

ErrorDocument 404 /src/html/404.php

在我的 index.php 中,我得到了' v '变量并检查数据库中是否存在该页面。

如果页面存在,我将包含页面内容,如果页面不存在,我将包含404错误页面。

除非我尝试访问现有目录,例如:

,否则一切都正常运行

example.com/src

它会自动重定向到:

example.com/src/?v=src

并显示错误页面

但是当我尝试:

example.com/src / (使用' / '在网址末尾)

它将保留URL并显示错误页面! (这就是我需要的)

现在我想知道如果网址没有' / ' ?

2 个答案:

答案 0 :(得分:0)

添加2行以检查网址是不是真正存在的文件或文件夹

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !(\.css|\.js|\.png)$
RewriteRule ^(.*)$ index.php?v=$1 [NC,L,QSA]

答案 1 :(得分:0)

我找到了一个棘手的解决方案,但我不知道这是不是一个好主意!

我编辑了我的 .htaccess 文件并添加了:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]

这样可以正常工作,除非它会添加" / "到网址的末尾(这不是问题,但更改我不喜欢的网址)

<强>更新

我找到了正确的解决方案:

DirectorySlash Off