如何通过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具有站点页眉/页脚。
它将404重定向到index.php。如何让它将所有请求重定向到php页面(index.php本身除外)?
此方法是否存在任何性能问题(不想使用框架)?
答案 0 :(得分:20)
这是我使用的(并且已经使用了很长时间):
<IfModule mod_rewrite.c>
# Redirect /index.php to / (optional, but recommended I guess)
RewriteCond %{THE_REQUEST} ^[A-Z]{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
答案 1 :(得分:8)
使用:
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
网址示例: www.site.com/friend/josh/03-13-2012
所以$ params var值:
朋友/约什/ 2012年3月13日
只需要explode()“/”所以你得到带有参数的数组:
array(
0 => friend
1 => josh
2 => 03-13-2012
)
答案 2 :(得分:4)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule .*\.php$ index.php?q=%{REQUEST_URI} [L]
将捕获所有以.php结尾的请求,这些请求不会指向以index.php结尾的文件,并将它们重定向到get参数中的index.php q
答案 3 :(得分:0)
要将所有不存在的请求重定向到 /index.php ,您还可以使用 ErrorDocument 和 FallbackResource 指令。
尝试以下示例之一:
ErrorDocument 404 /index.php
FallbackResource /index.php
这些指令是apache核心模块的一部分,你不需要启用mod-rewrite来使用它们。
如果您正在寻找重定向所有请求(包括真实文件/目录)的方法,请尝试以下重定向
RedirectMatch ^/(?!index\.php).+)$ /index.php