2012-04-04 71 views
0

我已经找到了我的mod_rewrite困境的答案,我觉得我在我的智慧结束。我将有一个这样的网址:http://www.website.com/dashboard.php?username=stackoverflow。这个网址并不是最漂亮的。所以我的目标是在这里做一些事情...Apache mod_rewrite页面前的查询字符串,并删除扩展

  1. 消除php文件的扩展(我已经能够做到这一点与我将在下面显示的代码,但我不' t知道它将保持根据我需要做的其他事情)
  2. 消除“www”前缀
  3. 移动用户名查询字符串(仅当它是“用户名”,我不想匹配“id “或类似)直接在”.com /“之后
  4. 在查询字符串后面移动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] 

可悲的是这只是修复我的问题之一,看着它之后,我越来越觉得会有更好的方法来做到这一点...

+1

到site.com我d建议您阅读YSlow插件中非常有趣的“优化网站”规则,并且您可能会猜测为什么删除“www”,除非您的静态内容指向另一个域名是一个坏主意。 – 2012-04-04 06:10:20

+0

啊,好点奥利维尔...这是一个很好的观点。谢谢! – cereallarceny 2012-04-04 17:57:45

+1

在这里阅读这个关于www的非常好的答案:http://webmasters.stackexchange.com/questions/6107/www-yoursite-com-or-http-yoursite-com-which-one-is-futureproof – 2012-04-05 07:10:59

回答

1

(1,3,4)据我所知,你想使用漂亮的URL,但支持PHP页面。因此,它应该是这样的:

RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(\w+)/profile$ /dashboard.php?username=$1 [L] 

它将使http://website.com/stackoverflow/profile作为http://www.website.com/dashboard.php?username=stackoverflow

(2) #重定向www.site.com正与301

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
+0

如果我想想要有一个单独的页面(例如:home.php),然后根据我写的if语句加载dashboard.php或profile.php的内容。该URL看起来像http://website.com/stackoverflow。用上面写的规则可以做到这一点吗? – cereallarceny 2012-04-04 17:41:00

+0

是的。例如。 RewriteRule ^(\ w +)$ /home.php?username=$1 [L](\ w +)模式当然可以不同。但是你需要确保你的模式不含糊。这可能会非常棘手 - 但您可以按照您希望使用这些类型的重写的方式来组织链接。我为我的网站使用这种方法。 – 2012-04-04 17:50:02

+0

精彩回答尤金。谢谢你的帮助! – cereallarceny 2012-04-07 19:37:27

相关问题