Php 如何让我的mod_重写规则忽略对特定目录的重写

Php 如何让我的mod_重写规则忽略对特定目录的重写,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我尝试过搜索,但没有找到任何可以帮助我解决以下问题的方法。我发现这个链接是这样的:但是它里面的所有链接都是404死的 我正试图美化我网站的URL,因此www.mysite.com/aboutus.php被重写为www.mysite.com/aboutus,效果很好 但是我不想在admin/cms目录上这样做,因为它会阻止cms工作。所以忽略www.mysite.com/admin.php 我使用的代码是: RewriteEngine On # Unless directory, remove

我尝试过搜索,但没有找到任何可以帮助我解决以下问题的方法。我发现这个链接是这样的:但是它里面的所有链接都是404死的

我正试图美化我网站的URL,因此
www.mysite.com/aboutus.php
被重写为
www.mysite.com/aboutus
,效果很好

但是我不想在
admin/cms
目录上这样做,因为它会阻止cms工作。所以忽略
www.mysite.com/admin.php

我使用的代码是:

RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://mysite.com/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://mysite.com/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
我不认为我这样做是正确的,因为它还去掉了URL开头的
www

我也发现这一点:它似乎能满足我的需求,但我不能100%肯定它能满足我的需求

如果有人能帮我重写这个mod,这样它就可以从链接的末尾删除
.php
,但在admin目录中忽略它,那就太好了

我不认为我这样做是正确的,因为它也把WWW从URL的开头去掉了

之所以会发生这种情况,是因为您正在重定向以删除
www
的URL:

# no "www." here -------------v
RewriteRule ^([^/]+)/$ http://mysite.com/$1 [R=301,L]
尝试将它们全部更改为:

RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L]
我也发现这一点:它似乎能满足我的需求,但我不能100%确定它能满足我的需求,所以一个教程可能是最好的(我讨厌在学习的过程中一直对你们发牢骚)

该链接满足您的需要,您不需要底部的
profile.php
内容,您可以忽略它。但这一点:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
在你的最后一条规则很重要之前(你似乎忽略了这一点)。它检查文件是否存在php扩展名,而不是盲目地重写它(这将导致500服务器错误(请参阅:)

至于好的教程。我所看到的大多数教程都非常通用,它们介绍了一般的指令和规则以及一些更常见的应用程序。这可能是我见过的最好的一个:

关于mod_rewrite,将会有很多教程中没有介绍的细节和怪癖,其中一些看起来非常违反直觉。你只需继续使用它,遇到这些情况,并从中学习。

可能重复的