【问题标题】:htaccess remove .php extension, index.php AND add trailing slashhtaccess 删除 .php 扩展名、index.php 并添加斜杠
【发布时间】:2011-03-02 18:20:26
【问题描述】:

这适用于基本的 HTML/PHP 页面,没有查询字符串等。我搜索了高低并找到了从 URI 中删除“index.php”或删除“.php”和其他文件扩展名的资源.. 甚至添加一个斜杠。但是,每次我尝试全部使用它们,或者使用我找到的示例时,我都会收到 500 服务器错误。

我可能会在一个页面上传递一个查询字符串,但实际上我只是想从索引页面中删除“index.php”并让所有子页面都没有文件扩展名。所以,是这样的:

domain.com/index.php 到 domain.com/ domain.com/page1.php 到 domain.com/page1/ domain.com/page2.php 到 domain.com/page2/ domain.com/page3.php 到 domain.com/page3/

我能找到的所有示例都集中在 CMS 等。带有查询字符串等。没有只关注基本 URI,我认为这可能是导致我遇到错误的原因。

任何帮助表示赞赏! 谢谢

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    我曾经从一个论坛上一个相当有帮助的小伙子那里得到这个 - 从来没有完全理解它,并且有一个警告;它暗示 没有 尾部斜杠,除非请求是目录。

    但是,我认为值得发布 - 那里的专家可能很容易发现修复!?

    # remove .php; use THE_REQUEST to prevent infinite loops
    RewriteCond %{HTTP_HOST} ^www\.domain\.com
    RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
    RewriteRule (.*)\.php$ $1 [R=301]
    
    # remove index
    RewriteRule (.*)index$ $1 [R=301]
    
    # remove slash if not directory
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} /$
    RewriteRule (.*)/ $1 [R=301]
    
    # add .php to access file, but don't redirect
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule (.*) $1\.php [L]
    

    【讨论】:

    • 谢谢!我会试一试,看看我们能弄清楚什么.. 任何大师都关心添加/调整它以在所有请求中包含一个尾部斜杠??
    • 终于,一个可行的答案。我从高处和低处搜索。请注意,我必须在开头添加“RewriteBase /”,因为我的文件嵌套在域下方的其他文件夹中,并且它将它们路由到较低级别,这显示在 URL 中。 = 不好。
    【解决方案2】:

    你可以在你的 htaccess 文件中试试这个:

    Options +MultiViews
    

    但这取决于您的网络服务器是否启用它。另外,请注意 htaccess 文件是特定于 Apache 网络服务器的,因此如果您使用其他东西,它就无法工作。

    【讨论】:

    • 你还认识不使用 Apache 的人吗? :)
    • @Marco Demaio:实际上......这些天我主要使用 Nginx。 Apache 有一些优势,但通常您不需要所有这些功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2012-04-15
    • 2014-03-04
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多