使用htaccess RewriteRule处理非现有文件

时间:2016-09-26 02:02:19

标签: php apache .htaccess redirect mod-rewrite

我有以下代码:

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

# If requested resource exists as a file or directory.
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^join_([A-Za-z0-9\-\_]+)/?$ /index.php?ref=$1 [L,QSA]
RewriteRule ^secure_access&u=([A-Za-z0-9\-\_]+)&p=([A-Za-z0-9\-\_]+)/?$ /index.php?a=do_login&username=$1&password=$2 [L,QSA]
RewriteRule ^earning_stats/?$ /index.php?a=earnings&type=earning&page=$1 [L,QSA]
RewriteRule ^external_funding/?$ /index.php?a=earnings&type=add_funds&page=$1 [L,QSA]
RewriteRule ^investment_stats/?$ /index.php?a=earnings&type=deposit&page=$1 [L,QSA]
RewriteRule ^affiliate_stats/?$ /index.php?a=earnings&type=commissions&page=$1 [L,QSA]
RewriteRule ^earning_stats_pz/?$ /index.php?a=earnings&type=earning&ec=11&page=$1 [L,QSA]
RewriteRule ^earning_stats_pm/?$ /index.php?a=earnings&type=earning&ec=18&page=$1 [L,QSA]
RewriteRule ^earning_stats_pa/?$ /index.php?a=earnings&type=earning&ec=43&page=$1 [L,QSA]
RewriteRule ^earning_stats_btc/?$ /index.php?a=earnings&type=earning&ec=48&page=$1 [L,QSA]
RewriteRule ^earning_stats_adv/?$ /index.php?a=earnings&type=earning&ec=56&page=$1 [L,QSA]
RewriteRule ^earning_stats_bw/?$ /index.php?a=earnings&type=earning&ec=999&page=$1 [L,QSA]
RewriteRule ^.*$ index.php [L]

我实际上将所有HTTP请求重定向到HTTPS,只要文件/目录不存在就重写URL,如果没有有效条件,最后会重定向到index.php。

但是,我想将所有404请求重定向到名为“error.php”的自定义页面,但由于上次重写规则,我无法执行此操作。 我的网站基于一个名为“index.php”的文件,其中包含所有页面,然后通过阅读GET参数“a”打印它们(只需查看3个第一次重写规则join,secure_access和earning_stats)。 所以还有许多其他页面,例如:

http://domain.com/index.php?a=logout

我的PHP脚本将其读取为:

http://domain.com/logout

无需在.htaccess上添加(预览:http://puu.sh/rnYhq/8003fa32cc.png

这可能听起来很难或很难解释,请随时向我询问更多信息。

0 个答案:

没有答案