【问题标题】:How to remove extension from url WITHOUT trailing slash using .htaccess?如何使用 .htaccess 从不带斜杠的 url 中删除扩展名?
【发布时间】:2016-03-31 17:46:00
【问题描述】:

我有一个 .htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

我有一个名为random.php的文件。

我想要做的只是调用something.com/random,但是 Apache 在 URL 的末尾添加了一个斜杠(使用 301 重定向),因此给出了一个错误,指出找不到 something.com/random/.php

编辑 1:当我使用时

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [NC,L]

然后我的外部文件(.js、.css 等)无法加载,服务器以 500 Internal Server Error 响应进行响应。 Apache 说重定向太多了。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    用可选的斜杠试试这个规则:

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

    【讨论】:

    • 好吧,不幸的是它不起作用。 :( 我的外部样式表无法加载,出现 500 内部服务器错误。
    • 还是不行 :( apache 目录 TrailingSlash 一定有什么东西。
    • 需要更多信息才能继续。花时间回答所有问题。 Q1。您在浏览器中输入的网址是什么? Q2。这是唯一的 .htaccess 还是你有另一个? Q3。这是这个 .htaccess 中唯一的代码吗?如果您有其他代码,请发布有问题的代码? Q4。 .htaccess 上面的位置在哪里?
    • Q1:https://www.forcemagic.xyz/random Q2&3:我没有更多的 .htaccess 文件了,这里也没有写其他内容。 Q4:位于/var/www(服务器根目录)
    • 等等...它可以工作...但只有那个文件。没关系。自己解决了,只是重命名了文件
    【解决方案2】:

    你几乎做对了,你只需要排除斜线:

    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.\/]+)$ $1.php [NC,L]    
    

    【讨论】:

    • 你能用Options -MultiViews开始你的.htaccess吗?
    • 你的意思是把它加到第一行?不,它仍然不起作用。我搜索并发现有一个 Directory TrailingSlash yes|no 的东西。我不应该设置它吗?
    • 查看我编辑的答案,我假设您的 htaccess 中有更多行?因为您说的是您不提供的 301 重定向?
    • 查看我编辑的评论,我认为这是最初的问题
    • 你的意思是DirectoryIndexRedirect?这仅适用于您也有一个名为 /random/ 的文件夹时。但是,如果您没有具有该名称的文件夹,我的代码应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多