我试过搜索,发现什么都没有帮助我解决以下问题。我在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}},但是在管理目录中忽略这个很好。
答案 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的细节和怪癖不会在教程中介绍,其中一些看起来非常违反直觉。你只需要继续使用它并遇到这些情况,并从中学习。