【问题标题】:Redirect loop error重定向循环错误
【发布时间】:2014-08-22 14:46:08
【问题描述】:

我已经使用 .htaccess 隐藏所有页面的 .php 扩展名

但是当某些类型的链接地址带有 .php 扩展名时,页面仍然以 .php 扩展名打开。我已经尝试将 .php 页面永久重定向到非 php 页面,例如 example.com/about.php 到 example.com/about,但它给了我重定向循环错误。

这是我的 .htaccess 代码

RewriteEngine on

<IfModule mod_rewrite.c>
RewriteRule ^products/(\d+)/([\d\w-\s]*)/([\d\w-\s]*)/([\d\w-\s]*)/?$ product_detail.php?id=$1&category=$3&parent_category=$2 [L,QSA]
</IfModule>

Options +MultiViews




ErrorDocument 404 /404.html

【问题讨论】:

  • 重写规则的哪一部分是“重写以 .php 结尾的东西”?因为它非常具体,并且在此之前没有“php”$
  • 我用过"Options +MultiViews" 有没有其他方法可以隐藏.php 扩展名并用非php 重定向.php?

标签: php regex apache .htaccess mod-rewrite


【解决方案1】:

将您的代码保留在根 .htaccess 中:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

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

RewriteRule ^products/(\d+)/([\d\w\s-]*)/([\d\w\s-]*)/([\d\w\s-]*)/?$ product_detail.php?id=$1&category=$3&parent_category=$2 [L,QSA]

【讨论】:

  • 成功了!太感谢了。你能帮我把link重定向到link
  • 很高兴它成功了。我可以知道您如何获得http://www.example.com/index 的链接,因为我的第一条规则会将http://www.example.com/index.php 重定向到http://www.example.com/
【解决方案2】:

您可以尝试将其添加到规则的顶部(就在RewriteEngine On 下方

RewriteCond %{THE_REQUEST} \ /+(.*)\.php
RewriteRule ^ /%1 [L,R=301]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多