1

我创建了一个允许虚 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]

有人知道怎么修这个东西吗?谢谢你们!

4

2 回答 2

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. 解决它的一种方法是检查 *if 是否$_GET['u']为空或/in 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]
    

处理这个问题的最好方法是使用 PHP,

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

现在index.php会得到你通过的每一个uri。现在您可以处理index.php.

于 2012-12-09T03:56:20.220 回答
2

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

编辑(由于我一开始没有正确阅读问题)

你试过没有 RewriteRule .* - [L] 行吗?

于 2012-12-09T03:23:02.920 回答