PHP/.htaccess:从url中删除PHP扩展

PHP/.htaccess:从url中删除PHP扩展,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我使用.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(找不到页面)。谁能帮我弄点光吗 谢谢, Paul G.看

我使用.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(找不到页面)。谁能帮我弄点光吗

谢谢,
Paul G.

看起来你规则末尾的斜杠可能在那里,也可能不在那里。添加一个
使其成为可选的,因此
mysite.com/about
mysite.com/about/
都将匹配

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

很难说这是导致你的问题的原因,还是其他原因造成的。
mysite.com/about.php
是否也会给您带来错误?

规则末尾的斜杠可能在那里,也可能不在那里。添加一个
使其成为可选的,因此
mysite.com/about
mysite.com/about/
都将匹配

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-\s]+)/?$ /$1.php
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]
很难说这是导致你的问题的原因,还是其他原因造成的。
mysite.com/about.php
是否也会给您一个错误

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]
上述规则将:

  • 如果存在文件夹,则不会重定向
  • 如果文件不存在,则不会重定向
  • 将重定向
    /
    之前的内容(如果文件名中有)
  • 因此,它适用于所有这些示例:

    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/
    
    现在,这些是上述工作的重要步骤:

  • 它必须进入根文件夹中的
    .htaccess
    ,例如
    /home/yourcount/public\u html/.htaccess
  • 重写规则之前的选项非常重要,特别是
    -MultiViews
  • 该文件必须存在于同一位置,例如,
    .htaccess
    就是
    about.php
    文件
  • 显然,PHP一定在工作
  • 上述规则将:

  • 如果存在文件夹,则不会重定向
  • 如果文件不存在,则不会重定向
  • 将重定向
    /
    之前的内容(如果文件名中有)
  • 因此,它适用于所有这些示例:

    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/
    
    现在,这些是上述工作的重要步骤:

  • 它必须进入根文件夹中的
    .htaccess
    ,例如
    /home/yourcount/public\u html/.htaccess
  • 重写规则之前的选项非常重要,特别是
    -MultiViews
  • 该文件必须存在于同一位置,例如,
    .htaccess
    就是
    about.php
    文件
  • 显然,PHP一定在工作

  • 它不带尾随的斜杠“/”,一旦我添加了斜杠,它会加载页面而不带样式,当导航到另一个页面时,它会返回404错误,url会返回到www.mysite.com/about/services。@netizen0911这是因为你使用了css、图像和javascript的相对路径,不要使用
    css/my.css
    您需要像这样使用完整的URL
    http://domain.com/css/my.css
    在您的HTML上。当使用相对URL(如
    css/my.css
    时,它将假定该文件位于您的案例中假定为
    http://domain.com/about/css/my.css
    这就是它失败的原因。是的,我想出来了,但是如果从末尾有斜杠“/”的地址导航,会出现404错误吗?(也就是说,当我拥有www.mysite.com/about/up并点击contact.php链接时,它会给出www.mysite.com/about/contact/,而不是www.mysite.com/contact/)@netizen0911同样的原因,你使用相对路径作为你的URL,你需要使用完整路径
    会给你一个结果,
    会给你一个与
    不同的结果,图像、CSS、JavaScript和任何其他资源也是如此。最好有一个你从未使用过的浏览器来处理这个问题,如果浏览器a被缓存,你可以通过浏览器B确认,对于多级文件夹,规则是不同的,
    RewriteRule^(+?)/?$$1.php[L]
    只需将上面的
    RewriteRule
    替换为这个,并保留2
    RewriteCond
    。它不带尾随斜杠“/”,一旦添加斜杠,它将加载页面而不带样式,当导航到另一个页面时,它返回404错误,而url指向www.mysite.com/about/services。@网友0911这是因为你使用的是css、图像和javascript的相对路径,而不是使用
    css/my.css
    你需要像这样使用完整的url
    http://domain.com/css/my.css
    在您的HTML上。当使用相对URL(如
    css/my.css
    时,它将假定该文件位于您的案例中假定为
    http://domain.com/about/css/my.css
    这就是它失败的原因。是的,我想出来了,但是如果从末尾有斜杠“/”的地址导航,会出现404错误吗?(也就是说,当我拥有www.mysite.com/about/up并点击contact.php链接时,它会给出www.mysite.com/about/contact/,而不是www.mysite.com/contact/)@netizen0911同样的原因,你使用相对路径作为你的URL,你需要使用完整路径
    会给你一个结果,
    会给你一个与
    不同的结果,图像、CSS、JavaScript和任何其他资源也是如此。最好有一个你从未使用过的浏览器来处理这个问题,如果浏览器a被缓存,你可以通过浏览器B确认,对于多级文件夹,规则是不同的,
    RewriteRule^(+?)/?$$1.php[L]
    只需将上面的
    RewriteRule
    替换为这个,并保留2
    RewriteCond