我希望 www.example.com/about.php 成为 www.example.com/about
我创建了一个 .htaccess 文件并将其放置在服务器的根目录中。 我正在使用Linux共享主机。 PHP 版本 5.2
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
这段代码似乎应该可以正常工作,但由于某种原因却不能正常工作。当我尝试导航到没有 .php 扩展名的页面时,出现 404 错误。
这也是我的标记:
<nav>
<div class="container">
<ul>
<li><a href="index.php" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="current-nav"';?>>home</a></li>
<li><a href="about.php">about</a></li>
<li><a href="services">our services</a></li>
<li><a href="portfolio" <?php if (strpos($_SERVER['PHP_SELF'], 'portfolio.php')) echo 'class="current-nav"';?>>portfolio</a></li>
<li><a href="testimonials" <?php if (strpos($_SERVER['PHP_SELF'], 'testimonials.php')) echo 'class="current-nav"';?>>testimonials</a></li>
<!--<li><a href="#">client area</a></li>-->
<li><a href="contact" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="current-nav"';?>>Contact</a></li>
<li><a href="order" <?php if (strpos($_SERVER['PHP_SELF'], 'order.php')) echo 'class="current-nav"';?>><strong>Free Quote</strong></a></li>
</ul>
</div>
</nav><!--/navigation-->
您可以看到我尝试使用链接中的 php 扩展,也尝试过不使用。带有 php 扩展名的链接会转到该页面,但不要删除该扩展名。
我做了一个测试,看看是否通过放入一些垃圾并返回 500 错误来启用 module_rewrite。
使用此代码隐藏/删除
.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 [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
经过与谷歌长时间的较量,我终于弄清楚了这个问题。 这适用于 Godaddy 共享主机。 它删除了 php 文件扩展名,因此 http://yoursite.com/about.php 变为 http://yoursite.com/about
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f #If requested is not a filename...
RewriteCond %{REQUEST_FILENAME} !-d #And not a directory
RewriteRule ^(.*)$ $1.php [L] # perform this redirect
(上传到服务器之前删除评论)
我也遇到了这个问题,但我发现这似乎解决了 GoDaddy .htaccess 问题。
# Fix Rewrite
Options -Multiviews
# Mod Rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
粘贴在我的 .htaccess 文件中的所有内容之上,对我有用......
## 301 Redirects
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L]
你的重写规则不正确,它是错误的。试试这个:
RewriteRule ^(.*).php$ /$1 [L,R=301]
在 ChatGTP 4 的帮助下,这对我有用
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# Externally redirect /dir/foo.php to /dir/foo
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]
# To internally redirect /dir/foo to /dir/foo.php
# The condition checks if the .php version of the filename exists
RewriteCond %{REQUEST_FILENAME}.php -f
# The condition checks that the request is not already for a .php file
RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]