【问题标题】:Resolving conflicting url rewrite rules解决冲突的 url 重写规则
【发布时间】:2011-11-21 01:38:09
【问题描述】:

我正在做一个网站,我面临一个大问题是:

  1. 我希望我的所有流量 http://www.example.com/http://example.comhttp://www.example.com/folder/http://example.com/folder/

(注意:这里的关键是它可以用于无限数量的子文件夹或页面,只要其相同的根域)

  1. 我想将http://example.com/name 重写为http://example.com/folder/page.php?page=$name,但我将指定一些像http://example.com/css 这样的网址。 这一次,url 仍然显示http://example.com/name 这是访问过的页面,但实际上页面已被重写。这与更改地址栏中的 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>

我上面遇到的问题是:

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

  2. 它似乎对http://www.example.com/name 重写得很好,但是当我有一个带有http://example.com/css 之类的例外的网址时,它会将网址更改为http://example.com/css/?page=css

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

非常感谢。

【问题讨论】:

    标签: apache .htaccess url-rewriting


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2012-06-09
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多