【问题标题】:PHP/.htaccess: removing php extension from urlPHP/.htaccess:从 url 中删除 php 扩展名
【发布时间】:2013-09-11 21:51:17
【问题描述】:

我正在使用 .htaccess 代码删除所有网页的 .php 扩展名。这是我使用的代码:

RewriteEngine On
RewriteCond /%{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.php

它似乎不起作用。我想我错过了一些东西。当我键入 www.mysite.com/about/ 以获取 www.mysite.com/about.php 时,它返回错误 404(找不到页面)。有人可以阐明一下。

谢谢, 保罗 G.

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:
    Options +FollowSymLinks -MultiViews
    
    RewriteEngine On
    RewriteBase /
    
    # If folder does not exist
    RewriteCond %{REQUEST_FILENAME} !-d
    # and file exist
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
    # uncomment the below rule if you want the "/" to be required 
    # otherwise leave as is
    # RewriteRule ^([^/]+)/$ $1.php [L]
    # internally show the content of filename.php
    RewriteRule ^([^/]+)/?$ $1.php [L]
    

    上述规则将:

    1. 如果文件夹存在则不会重定向
    2. 如果文件不存在则不会重定向
    3. 将重定向 / 之前的内容(如果文件名存在)

    因此它适用于所有这些示例:

    http://domain.com/about/
    http://domain.com/about
    http://domain.com/contact/
    http://domain.com/contact
    

    如果您愿意,您可以删除 ?,就像注释规则一样,使其仅接受以 / 结尾的 URL。

    http://domain.com/about/
    http://domain.com/contact/
    

    现在这些是上述工作的重要步骤:

    1. 它必须进入根文件夹的.htaccess,例如/home/youraccount/public_html/.htaccess
    2. 重写规则之前的选项非常重要,特别是-MultiViews
    3. 该文件必须存在于.htaccess 的同一位置,例如在您的情况下为about.php 文件
    4. PHP 肯定可以正常工作。

    【讨论】:

    • 它在没有斜杠“/”的情况下工作,一旦我添加斜杠,它会加载没有样式的页面,当导航到另一个页面时它返回 404 错误,并且 url tunrs 到 www.mysite。 com/about/services.
    • @netizen0911 那是因为您使用 css、图像和 javascript 的相对路径,而不是使用 css/my.css,您需要在 HTML 上使用像 http://domain.com/css/my.css 这样的完整 URL。当使用像 css/my.css 这样的相对 URL 时,它会假定该文件在您的情况下位于同一文件夹中,它会假定 http://domain.com/about/css/my.css 这就是它失败的原因。
    • 是的,我想通了,但是从末尾有斜杠“/”的地址导航时出现 404 错误怎么办? (即,当我打开 www.mysite.com/about/ 并单击 contact.php 链接时,它会给出 www.mysite.com/about/contact/ 而不是 www.mysite.com/contact/)
    • @netizen0911 与您为 URL 使用相对路径的原因相同,您需要使用完整路径。 <a href="/contact/">contact</a> 会给你一个结果,而<a href="contact/">contact</a> 会给你一个与<a href="http://domain.com/contact/">contact</a> 不同的结果,图片、CSS、JavaScript 和任何其他资源也是如此。
    • 最好有 1 个你从不使用的浏览器,如果浏览器 A 被缓存,你检查浏览器 B 以确保,对于多级文件夹,规则会有所不同,@ 987654339@ 只需将上面的RewriteRule 替换为这个并保留2 RewriteCond
    【解决方案2】:

    似乎规则末尾的斜线可能存在,也可能不存在。添加? 使其成为可选的,因此mysite.com/aboutmysite.com/about/ 都将匹配。

    RewriteEngine On
    RewriteRule ^([a-zA-Z0-9_-\s]+)/?$ /$1.php
    

    很难说这是导致您的问题的原因,还是其他原因。 mysite.com/about.php 也会报错吗?

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2012-11-12
      相关资源
      最近更新 更多