0

我在网上搜索了我的 mod_rewrite 问题的答案,但我觉得我已经无计可施了。我会有一个这样的网址:http://www.website.com/dashboard.php?username=stackoverflow. 这个网址不是最漂亮的。所以我的目标是在这里做一些事情......

  1. 消除 php 文件的扩展名(到目前为止,我已经能够使用我将在下面显示的代码做到这一点,但我不知道它是否会根据我需要做的其他事情保留)
  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]

可悲的是,这只解决了我的一个问题,在看了之后,我觉得会有更好的方法来做到这一点......

4

1 回答 1

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) # 使用 301 将 www.site.com 重定向到 site.com

    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
于 2012-04-04T05:36:06.687 回答