Apache 解决冲突的url重写规则

Apache 解决冲突的url重写规则,apache,.htaccess,url-rewriting,Apache,.htaccess,Url Rewriting,我正在一个网站上工作,我面临的一个大问题是: 我想让我所有的流量到或到 (注意:这里的关键是,它可以在同一根域中处理无限多的子文件夹或页面) 我想重写为$name,除了我将指定的一些URL之外。 这一次,url仍然显示访问的页面,但实际上页面已经被重写。这与更改地址栏中url的第一个场景不同 这就是我所拥有的: <IfModule mod_rewrite.c> Options +FollowSymlinks Options -Multiviews Rewrite

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

  • 我想让我所有的流量到或到
  • (注意:这里的关键是,它可以在同一根域中处理无限多的子文件夹或页面)

  • 我想重写为$name,除了我将指定的一些URL之外。 这一次,url仍然显示访问的页面,但实际上页面已经被重写。这与更改地址栏中url的第一个场景不同
  • 这就是我所拥有的:

    <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>
    
    
    选项+FollowSymlinks
    选项-多视图
    重新启动发动机
    重写基/
    重写cond%{REQUEST_FILENAME}-F
    重写cond%{REQUEST_FILENAME}-D
    重写cond%{HTTP_HOST}^示例\.com$[NC]
    重写cond%{REQUEST_URI}^/(候选人| css |雇主|布局|图片|安全图片)/$
    重写规则^(.*)$http://example.com/$1[R=301,L]
    重写规则^([^/]+)/?$employers/page.php?page=$1[L]
    
    我对上述问题的看法是:

  • 它不会重定向到

  • 它似乎重写得很好,但是当我有一个url,其中有一个例外,比如它将url更改为

  • 请问我怎样才能解决这个问题


    非常感谢。

    您必须将您的条件与重写规则分开:

    对于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]