.htaccess重写删除扩展名和查询字符串并进入文件夹结构但如果页面不存在则发送到另一个页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess重写删除扩展名和查询字符串并进入文件夹结构但如果页面不存在则发送到另一个页面相关的知识,希望对你有一定的参考价值。

我目前有一个非常好的.htaccess(包含在下面)。它需要用户访问content.php页面并向他们显示存储在数据库中的页面。但是,有些页面要求我进行硬编码,因此列出了.php扩展名。有没有办法添加一个重写规则,允许我删除扩展名并将查询字符串作为目录发送。

目前:http://www.example.com/dashboard.php?ax=clients&do=save&miscthirdparam=doitnow

致:http://www.example.com/dashboard/clients/save/doitnow/

但是,如果dashboard.php页面不存在,那么就像现在一样将它发送到content.php,以检查数据库中是否有要显示的页面? (如果数据库中没有页面,我会显示错误404)。

**我的当前.htaccess **

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z]*)/(.*)$ /content.php?url=$1/$2 [L]
    Options +FollowSymLinks
    RewriteEngine on
</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /content.php?err=404
</IfModule>
答案

你可以使用RewriteCond backreference。我们可以提取第一个URL路径,并找出php文件是否存在。举个例子,我们提取dashboard并检查%{DOCUMENT_ROOT}/dashboard.php文件是否存在。如果是这样,请使用指定的参数重写URL。正则表达式[^/]*匹配所有字符,除了后面的正斜杠/

RewriteCond %{REQUEST_URI} ^/([^/]*)
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^([^/]*)(/([^/]*))?(/([^/]*))?(/([^/]*))? /$1.php?ax=$3&do=$5&miscthirdparam=$7 [L]

以上是关于.htaccess重写删除扩展名和查询字符串并进入文件夹结构但如果页面不存在则发送到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 重写动态子域

htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]

Apache .htaccess 重写规则以删除 .php 文件扩展名

重写URL以删除查询字符串

如果 url 扩展名为 .php,则 htaccess 重写将其删除

.htaccess 获取整个查询字符串到一个变量