【问题标题】:.htaccess rewrite = 404 page.htaccess 重写 = 404 页
【发布时间】:2013-06-05 16:50:28
【问题描述】:

我想将例如 www.mydomain.com/about.php 改为 www.mydomain.com/about。

根据一些博客阅读,

这是我的 httpd.conf 上的内容

<Directory "var/www/mydomain">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Allow from all
Order allow, deny
RewriteEngine On
</Directory>

我的 .htaccess 文件

Order deny,allow
DirectoryIndex index.php

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

www.mydomain.com/about.php 仍然有效,但 /about 有 404 URL Not Found 页面。

上面的配置有问题吗?

【问题讨论】:

    标签: php apache .htaccess rewrite


    【解决方案1】:

    在你的最后一行,尝试:

    RewriteRule ^(.*)$     $1.php [L]
    

    (注意 ^ 和删除的 R=301)

    如果它不起作用,请尝试删除 .htaccess 文件中的所有先前行。只保留RewriteEngine On

    【讨论】:

    • 不确定这是否有用。当我从 httpd.conf 中删除“Options Indexes FollowSymLinks Includes ExecCGI”行时,我收到“You Don't have permission to access this page”消息。
    • @hangee 最后一枪,尝试仅删除 Includes ExecCGI 看看会发生什么。另外,在我的httpd.conf 中,我有以下顺序(不知道是否相关):Options Indexes FollowSymLinks / AllowOverride All / Order allow,deny / Allow from all
    • @hangee(将 / 替换为新行)
    【解决方案2】:

    您的前两个 RewriteRules 要求名称后有一个 / 作为最后一个字符。您可能希望将其设为可选:

    RewriteRule ^([^/]+)/?$ $1.php
    RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2.php
    

    这可能是您在第一个重写组中没有匹配 /about 的原因。我认为您正在尝试在第二个重写组中做一些不同的事情,但不清楚是什么(提示:对您正在做的事情发表一两条评论会很有帮助)。

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 2022-01-17
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多