我已经找到了我的mod_rewrite困境的答案,我觉得我在我的智慧结束。我将有一个这样的网址:http://www.website.com/dashboard.php?username=stackoverflow
。这个网址并不是最漂亮的。所以我的目标是在这里做一些事情...Apache mod_rewrite页面前的查询字符串,并删除扩展
- 消除php文件的扩展(我已经能够做到这一点与我将在下面显示的代码,但我不' t知道它将保持根据我需要做的其他事情)
- 消除“www”前缀
- 移动用户名查询字符串(仅当它是“用户名”,我不想匹配“id “或类似)直接在”.com /“之后
- 在查询字符串后面移动php文件名(不带扩展名)。
最终的URL应该看起来像这样:http://website.com/stackoverflow/dashboard
或者也许http://website.com/stackoverflow/profile
。
的代码,我现在所拥有的,它消除了文件的扩展名是这样的:
Options +FollowSymLinks
RewriteEngine On
RewriteBase/
# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]
# remove trailing slash ONLY if it is not an existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# rewrite to FILENAME.php if such file does exist and is not a folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L,QSA]
可悲的是这只是修复我的问题之一,看着它之后,我越来越觉得会有更好的方法来做到这一点...
到site.com我d建议您阅读YSlow插件中非常有趣的“优化网站”规则,并且您可能会猜测为什么删除“www”,除非您的静态内容指向另一个域名是一个坏主意。 – 2012-04-04 06:10:20
啊,好点奥利维尔...这是一个很好的观点。谢谢! – cereallarceny 2012-04-04 17:57:45
在这里阅读这个关于www的非常好的答案:http://webmasters.stackexchange.com/questions/6107/www-yoursite-com-or-http-yoursite-com-which-one-is-futureproof – 2012-04-05 07:10:59