解决冲突的url重写规则

时间:2011-09-20 12:41:49

标签: apache .htaccess url-rewriting

我正在网站上工作,我遇到的一个大问题是:

  1. 我希望我的所有流量http://www.example.com/http://example.comhttp://www.example.com/folder/http://example.com/folder/
  2. (注意:这里的关键是它可以为无数个子文件夹或页面工作,只要它的根域相同)

    1. 我想将http://example.com/name重写为http://example.com/folder/page.php?page= $ name,除了我将指定的http://example.com/css之类的网址。 这一次,网址仍然显示http://example.com/name这是访问过的页面,但实际页面已被重写。这与更改地址栏中的URL的第一种情况不同。
    2. 现在这就是我所拥有的:

      <IfModule mod_rewrite.c>
         Options +FollowSymlinks
          Options -Multiviews
          RewriteEngine on
          RewriteBase /
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
      
         RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
         RewriteCond %{REQUEST_URI} !^/(candidates|css|employers|layout|pics|securimage)/?$
      
         RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
         RewriteRule ^([^/]+)/?$ employers/page.php?page=$1 [L]
      </IfModule>
      

      我所遇到的问题是:

      1. 它不会将http://www.example.com/重定向到http://example.com

      2. 好像重写了http://www.example.com/name但是当我有一个像[{3}}这样的例外的网址时,它会将网址更改为http://example.com/css

        < / LI>

        请问我该如何解决这个问题。

        非常感谢你。

1 个答案:

答案 0 :(得分:0)

你必须将你的条件和重写规则分开:

对于www子域名:

RewriteCond %{HTTP_HOST} ^www.example.tld$
RewriteRule ^(.*) http://example.tld/$1 [QSA,R=301]

然后进行QSA重定向,除非该文件存在:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ employers/page.php?page=$1 [L]