0

真的找不到我的错误,我可以访问站点地图/链接,但所有其他人都给出了 404 Not Found 错误。

DirectoryIndex index.php index.php?page=home index.php?page=error
Options Indexes FollowSymLinks MultiViews

AllowOverride All
Order allow,deny
Allow from all

<IfModule mod_rewrite.c>
    RewriteEngine On

    # some other stuff #

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteBase /
    RewriteRule ^sitemap/?$ sitemap.xml.php [L]
    RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]
    RewriteRule ^products/?$ index.php?page=products [L]
    RewriteRule ^products/([0-9]+)/?$ index.php?page=products&id=$1 [L]
</IfModule>

我真的很感激一些帮助,我绝对不喜欢 .htaccess 文件......

4

1 回答 1

0

除了重写规则,这里还有其他问题:

DirectoryIndex index.php index.php?page=home index.php?page=error

这意味着,对于文件夹,将按以下顺序选择显示索引的文件(第一个现有获胜):

  1. index.php
  2. index.php?page=home(这是文件名
  3. index.php?page=error(这是文件名

我怀疑这是你的意图。

下一个:

AllowOverride All

如果您已经进入.htaccess并且AllowOverride受到限制,这将无济于事,如果不是,则没有必要再次编写此内容。

Order allow,deny
Allow from all

这基本上是说“允许每个人在任何地方”,无论如何这是默认设置。除非它在上层或 apache 配置中以某种方式受到限制,否则这是多余的。


至于重写:

RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]
RewriteRule ^products/?$ index.php?page=products [L]

无论如何,第二条规则是多余的,永远不会达到(因为第一条也匹配)。


至于您看到的错误:

[Wed Jul 04 02:56:30 2012] [error] [client 127.0.0.1] File does not exist: /var/www/home"

这可能意味着DocumentRoot定义存在问题。请发布您的VirtualHosts配置。

于 2012-07-04T08:40:58.333 回答