【问题标题】:How to get the current filename without the extension with htaccess?如何使用 htaccess 获取没有扩展名的当前文件名?
【发布时间】:2018-03-28 00:08:50
【问题描述】:

我有以下代码:

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} !^domain\.co
RewriteCond %{HTTP_HOST} !^[^.]+\.(domain\.co)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ /somefile.php [L]

表示somefile 的位需要是用户在没有扩展名的情况下使用的文件名。因此,如果它们位于example.com/file,则应该检索file

我尝试过使用下面的代码,但它似乎不起作用:

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} !^domain\.co
RewriteCond %{HTTP_HOST} !^[^.]+\.(domain\.co)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ /$.php [L]

重写规则中显示.php 的位不应是检索到的文件名的一部分,而是手动添加的。

如果不获取扩展就无法做到这一点,那么无论扩展如何,如何做到这一点?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以在现有规则之上添加此规则以添加.php 扩展:

    RewriteEngine On
    
    # add .php extension if corresponding .php file exists
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
    
    RewriteCond %{HTTP_HOST} !domain\.co$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !/$ /somefile.php [L]
    

    【讨论】:

    • 感谢您的回复,但我认为您误解了这个问题。检索到的文件应该是基本文件名本身。当我说somefile 时,这只是一个例子。此代码导致内部服务器错误。另外,对于 domain.co 的RewriteCond,你写的那一行和我之前写的那两行效果一样吗?
    • 你想在浏览器中显示什么 URL 以及你想如何在内部重写它?是的 RewriteCond %{HTTP_HOST} !domain\.co$ [NC] 就足够了,而不是你有 2 个条件。
    • 所以如果用户访问example.com/post,URL在浏览器中应该保持不变,但它们应该指向example.com/post.php(如果所有其他条件都为真 - 域不是@ 987654328@ 和没有.php 的文件不存在。不过,这应该是通用,因此它可能不仅仅是域的example.com,它可能是test.com 之类的任何东西。
    • 好的,这就是我的规则已经在做的事情。如果/file.php 存在,第一条规则将example.com/file 重写为example.com/file.php。如果/file.php 不存在,则使用第二条规则。您应该检查 Apache error.log 以了解 500 错误的原因。
    • 我是否应该删除/somefile.php 部分,因为它基于用户访问的文件名?应该换成$吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多