1

我是 URL 重写的新手和初学者...我需要删除这些页面的 .php 扩展名以获取菜单链接。

<ul class="nav">
      <li><a href="index.php">Home</a></li>
      <li><a href="about.php">About</a></li>
      <li><a href="services.php">Services</a></li>
      <li><a href="rates.php">Rates</a></li>
      <li><a href="contact.php#main">Contact Us</a></li>
 </ul>

我正在为 .htaccess 文件使用以下代码

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
# Remove .php-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^([^\.]+)/$ $1.php
# End of Apache Rewrite Rules
 </IfModule>

例如:

localhost/websitename/index.php

本地主机/网站名称/索引

localhost/websitename/about.php

本地主机/网站名称/关于

localhost/websitename/services.php

本地主机/网站名称/服务

localhost/websitename/rates.php

本地主机/网站名称/费率

localhost/websitename/contact.php#main

本地主机/网站名称/联系人主要

但是下面的重写规则显示了这样的结果

localhost/websitename/services.php

localhost/services...... 错误:找不到页面。. . . . 以此类推……

我做错了什么?我怎样才能实现这个简单的 URL 重写?

4

2 回答 2

1

要隐藏.php扩展名,请用以下代码替换您的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=301,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/gta/$1.php -f
RewriteRule ^(.+?)/?$ /gta/$1.php [L]
于 2013-09-20T21:21:06.903 回答
0

看起来您只是缺少磁盘上文件路径的一部分:

  RewriteRule ^([^\.]+)$ websitename/$1.php
于 2013-09-20T20:19:43.777 回答