通过index.php重新路由所有PHP请求
如何通过index.php重新路由所有的php页面请求?
我的.htaccess如下所示:
Options +FollowSymLinks IndexIgnore */* #Turn on the RewriteEngine RewriteEngine On # Rules RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !.*\.(js|ico|gif|jpg|png|css|pdf)$ index.php%{REQUEST_URI} [L]
基本上,我试图模仿.NET母版页。 index.php具有网站页眉/页脚。
它将404redirect到index.php。 我怎样才能redirect所有的请求到PHP页面(index.php本身除外)?
这个方法是否有任何性能问题(不想使用框架)?
以下是我使用(并用于年龄):
<IfModule mod_rewrite.c> # Redirect /index.php to / (optional, but recommended I guess) RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*index\.php RewriteRule ^index.php/?(.*)$ $1 [R=301,L] # Run everything else but real files through index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L] </IfModule>
正如注释所示,它会将每个不是实际文件的请求路由到index.php
使用:
RewriteEngine On RewriteBase / RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteCond $ 1!^(index \ .php | public | css | js | robots \ .txt) RewriteRule ^(。*)$ index.php / params = $ 1 [L,QSA] ErrorDocument 404 /index.php
url示例:www.site.com/friend/josh/03-13-2012
所以$ params var值:
朋友/乔希/ 2012年3月13日
只需要爆炸()“/”所以你得到数组与PARAMS:
array( 0 => friend 1 => josh 2 => 03-13-2012 )
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !index\.php$ RewriteRule .*\.php$ index.php?q=%{REQUEST_URI} [L]
将捕获以.php结尾的所有请求,这些请求不指向以index.php结尾的文件,并将其redirect到get参数q
index.php
要将所有不存在的请求redirect到/index.php ,您还可以使用ErrorDocument和FallbackResource指令。
尝试以下示例之一:
ErrorDocument 404 /index.php FallbackResource /index.php
这些指令是Apache核心模块的一部分,你不需要启用mod-rewrite来使用它们。
如果您正在寻找redirect所有请求(包括真实文件/目录)的方法,请尝试以下redirect
RedirectMatch ^/(?!index\.php).+)$ /index.php