0

我尝试过搜索,但没有发现任何可以帮助我解决以下问题的东西。我在 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目录上执行此操作,因为它会阻止 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]

我不认为我这样做是正确的,因为它也取消www了 URL 的开头。

我也发现了这个:https ://stackoverflow.com/a/9565288/1343827这似乎可以做我想做的事,但我不能 100% 确定它会做我想做的事。

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

4

1 回答 1

1

我不认为我这样做是正确的,因为它也使 WWW 脱离了 URL 的开头。

发生这种情况是因为您重定向到的 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这似乎可以做我想做的事,但我不能 100% 确定它会做我想做的事,所以教程可能是最好的(我讨厌在我学习的时候一直嘲笑你们)。

该链接可以满足您的需求,您只是不需要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 的许多细节和怪癖将不会在教程中涉及,其中一些看起来非常违反直觉。你只需要继续使用它并遇到这些情况,并从中学习。

于 2012-09-17T17:15:27.450 回答