使用 htaccess 删除扩展后,URL 不能与斜杠一起使用

Posted

技术标签:

【中文标题】使用 htaccess 删除扩展后,URL 不能与斜杠一起使用【英文标题】:URL doesn't work with slash after removing extension using htaccess 【发布时间】:2013-09-10 12:28:22 【问题描述】:

我一直在localhost上工作,我的htaccess文件是

Options +FollowSymLinks 
Options -Indexes
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule (.*) $1.php [L]

添加htacces代码后,url

localhost/movies/news.php

有效

localhost/movies/news

也可以,但是

localhost/movies/news/

不起作用。它显示“内部服务器错误”。如何使用斜线和不使用斜线。

【问题讨论】:

提示:RewriteLog /tmp/rewrite.log 【参考方案1】:

你试试这个代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# Internally forwards movies/news/ to movies/news.php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %DOCUMENT_ROOT/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

【讨论】:

【参考方案2】:

问题是当您添加斜线时,您有 news/.php 并且这不起作用。

更好的解决方案是重写一个 GET 变量,如下所示:

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule (.*) index.php?url=$1 [L]

然后您可以在脚本中过滤 GET 变量并包含您需要的文件或内容。

【讨论】:

这可行,但如何用于我的所有页面?我有27页,需要写27个重写规则吗?我试过 $1.php?url=$1[L] 这不起作用 也许你应该考虑一个更好的项目结构。不要写27页。使用一个 php 文件来生成您的网站。它更容易。

以上是关于使用 htaccess 删除扩展后,URL 不能与斜杠一起使用的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 .htaccess 文件删除 .php 扩展名时出现 403 禁止错误

htaccess - 从 url 中删除 .php 扩展名

如果 url 扩展名为 .php,则 htaccess 重写将其删除

.htaccess(500 内部服务器错误) - 删除 url 中的文件扩展名

从.htaccess中的URL中删除文件扩展名

使用 .htaccess 删除文件扩展名会导致错误