以下是我的.htaccess文件中的内容
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
这会将任何不存在的目录请求重定向到我的索引页面。这适用于www.site.com/AAA
,www.site.com/A1
,www.site.com/1A
,但不适用于www.site.com/1
或www.site.com/123
基本上,它不适用于只有数字的请求。
对此的任何想法将不胜感激。
我也试过
RewriteRule ^[0-9]*$ ./index.php
但这也不起作用。
我将Google作为我的默认搜索引擎,因此当我输入www.site.com/1234
并找不到该页面时,我会转到Google搜索结果页面,其中显示“您搜索www.site.com/1234没有匹配任何文件“ - 我认为这与404相同,但谷歌接管并将其视为搜索。
EDIT 我没想到这可能是一个浏览器问题。现在我尝试了FF Mac和IE Win,它运行正常。在Safari Mac或Safari iOS上无法正常工作。我刚刚将链接发送给更多人尝试。
答案 0 :(得分:0)
我刚刚使用你在默认的虚拟主机上对空的.htaccess进行规则,请求这个
http://test.local/1
这是该请求的rewrite.log
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (3) [perdir /mnt/webs/test/] strip per-dir prefix: /mnt/webs/test/1 -> 1
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (3) [perdir /mnt/webs/test/] applying pattern '^.*$' to uri '1'
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (2) [perdir /mnt/webs/test/] rewrite '1' -> './index.php'
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (3) [perdir /mnt/webs/test/] add per-dir prefix: ./index.php -> /mnt/webs/test/./index.php
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (2) [perdir /mnt/webs/test/] strip document_root prefix: /mnt/webs/test/./index.php -> /./index.php
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c002970/initial] (1) [perdir /mnt/webs/test/] internal redirect with /./index.php [INTERNAL REDIRECT]
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c00be98/initial/redir#1] (3) [perdir /mnt/webs/test/] strip per-dir prefix: /mnt/webs/test/index.php -> index.php
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c00be98/initial/redir#1] (3) [perdir /mnt/webs/test/] applying pattern '^.*$' to uri 'index.php'
127.0.0.1 - - [28/Feb/2014:10:31:14 +0800] [test.local/sid#a89a80][rid#7fc63c00be98/initial/redir#1] (1) [perdir /mnt/webs/test/] pass through /mnt/webs/test/index.php
我得到了index.php文件。它应该工作
虽然,一个小建议是改变这个
RewriteRule ^.*$ ./index.php
到这个
RewriteRule ^.*$ index.php
对您的代码不是一个很大的改动,但它删除了服务器的一个内部步骤,因为它不必解析'./'部分。
你可以做的一件事,就是确认事情按预期工作,就是把index.php文件改为:
var_dump( $_SERVER );
你应该看到这个位
'REDIRECT_URL' => string '/1' (length=2)
'REQUEST_URI' => string '/1' (length=2)
'SCRIPT_NAME' => string '/index.php' (length=10)
这意味着请求是/ 1,但正在执行的文件是index.php,这意味着重写有效。如果你得到了不同的东西,那就是调试的开始
答案 1 :(得分:0)
尝试使用
FallbackResource /index.php
而是删除重写规则。据说可以使用Apache 2.2.16+(我没有用数字测试但值得一试)。