如何让我的mod_rewrite规则忽略特定目录的重写

时间:2012-09-17 16:08:19

标签: php .htaccess mod-rewrite

我试过搜索,发现什么都没有帮助我解决以下问题。我在SO上找到了这个链接:https://stackoverflow.com/questions/1426056/good-htaccess-mod-rewrite-url-rewriting-tutorial但是其中的所有链接都已消失404。

我正在尝试美化我网站的网址,因此www.mysite.com/aboutus.php被重写为www.mysite.com/aboutus,看起来像admin/cms

但我不想在www.mysite.com/admin.php目录上执行此操作,因为它会阻止CMS运行。所以请忽略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]

我正在使用的代码是:

www

我认为我没有正确地执行此操作,因为它还会从URL的开头处取消.php

我也发现了这个SO:https://stackoverflow.com/a/9565288/1343827似乎做了我想做的事,但我并不是100%肯定会做我想做的事。

如果有人可以帮我改写这个mod,那么它会从链接的末尾删除{{1}},但是在管理目录中忽略这个很好。

1 个答案:

答案 0 :(得分:1)

  

我认为我没有正确地执行此操作,因为它也会使WWW脱离URL的开头。

这种情况正在发生,因为您要重定向到的网址已删除www

# no "www." here -------------v
RewriteRule ^([^/]+)/$ http://mysite.com/$1 [R=301,L]

尝试将它们全部更改为:

RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L]
  

我也发现了这个SO:https://stackoverflow.com/a/9565288/1343827这似乎做了我想要的,但我不是百分之百确定它会做我想要的,所以教程可能是最好的(我讨厌成为在我学习的过程中,你们一直都在喋喋不休。

该链接可以满足您的需求,您只需要底部的profile.php内容,就可以省略。但是这一点:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

在你的最后一条规则很重要之前(你似乎已经把它排除在外了)。它检查文件是否存在php扩展名而不是盲目地重写它(这将导致500服务器错误(参见:https://stackoverflow.com/a/12463742/851273)。

至于好的教程。我见过的大多数教程都非常通用,它们通常会涉及指令和规则以及一些更常见的应用程序。这可能是我见过的最好的一个:http://www.modrewrite.com/

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

相关问题