.htaccess文件无法识别index.php

时间:2012-12-09 03:14:21

标签: php mod-rewrite

我创建了一个允许虚URL的.htaccess文件。但是,如果不输入索引文件,我将无法再键入www.website.com。即我必须输入www.website.com/index.php才能看到主页。这就是我的.htaccess文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://www.website.com/profile.php?u=$1 [NC]

任何人都知道如何解决这个问题?谢谢大家!

2 个答案:

答案 0 :(得分:4)

您定义规则的方式增加了复杂性。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

如果文件名是文件进程的目录,则上述规则表示。之后不再进行处理

RewriteRule ^(.*)$ http://www.website.com/profile.php?u=$1 [NC]

此规则表示将任何请求uri映射到profile.php?u=

现在,当您请求/ www.website.com时,它会检查第一条规则并且无法匹配。然后检查第二条规则并将其映射到profile.php?u=

  1. 解决问题的一种方法是,如果$_GET['u']为空,则会检查*,/profile.php。如果是,则加载index.php
  2. 另一种方法是在找到用户名后找到适当的正则表达式。

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(USERNAME_REGEX)$ http://www.website.com/profile.php?u=$1 [NC,L]
    
  3. 处理此问题的最佳方法是使用PHP,

        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php?uri=$1 [L]
    

    现在index.php会让你通过的每一个人都可以。现在,您可以在index.php

    中处理URI

答案 1 :(得分:2)

这可能是由于您的服务器设置。 试试DirectoryIndex index.php(请参阅http://davidwalsh.name/directory-index-homepage-htaccess

编辑(由于我没有在第一时间正确阅读问题)

你没试过RewriteRule吗?* - [L] line?