目标:将所有请求(无论目录/文件是否存在)发送至http://example.com/index.php
我尝试了什么:
Rewrite Engine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://example.com/index.php [L]
它可以很好地重定向不存在的目录/文件的URL,但是当我访问现有的子目录并且文件http://example.com/test/test.php
时,它只给我test.php
页面的内容而不是主{{1}页面。
如果我理解正确,index.php
和RewriteCond %{REQUEST_FILENAME} !-f
会告诉它执行RewriteCond %{REQUEST_FILENAME} !-d
如果满足这些标准,这就是为什么它只重定向不存在的目录和文件。但是我已经尝试删除那些RewriteRule
了,它所做的就是将我的网站放到重定向循环中。
我也尝试过做
RewriteCond
但它根本不会重定向。
我需要做些什么来实现这个目标?
答案 0 :(得分:1)
您的第一个示例只会将您不存在的内容重定向到index.php
作为您所拥有的条件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
基本上意味着如果文件或目录不存在,请执行此操作。
你的第二个例子甚至是最糟糕的,因为它试图查看文件,目录是否存在而且不存在是没有意义的。
要将现有或不存在的任何内容重定向到主要处理程序index.php
,您只需要以下内容:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php$ [NC]
RewriteRule ^ index.php [L]
该条件确保您不会将其重定向到自己以防止循环。如果您运行的是HTTPD 2.4及更高版本,则可以使用:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^ index.php [END]
标志[END]
负责不执行任何进一步的重定向。
答案 1 :(得分:0)
如果您想重定向任何网址,只需使用RewriteRule
,这样它就会将任何不存在/不存在的文件/目录重定向到RewriteRule
规则
RewriteEngine on
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteRule ^(.*)$ index.php [L]