Mod重写查询字符串

时间:2012-10-21 05:59:35

标签: mod-rewrite

Mod Rewrite noob如此宽恕我的无知,但我想做的只是一个简单的查询字符串删除

来自:http://yourwebsite.com/x?section=y

至:http://yourwebsite.com/x/y

我在我的 .htaccess 中添加我的mod重写规则,如下所示:

ErrorDocument 404 /404

Options +MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{QUERY_STRING} ^section=(.*)$ [NC]
RewriteRule ^(.*)$ /$1/%1? [R=301,L,NE]

问题在于访问:

http://yourwebsite.com/x?section=y

我的规则将其写回:

http://yourwebsite.com/x.php/y

漂亮的网址中的 .php 非常难看,我正在努力摆脱它。

我的mod重写规则有什么问题?

1 个答案:

答案 0 :(得分:1)

很可能你正在寻找这样的东西:

RewriteEngine on

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

RewriteCond %{QUERY_STRING} ^section=(.*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1/%1 [R=301,L,NE]

它进行了两次重写:

  1. 请求x/y在内部重写为x.php?section=y
  2. x?section=y的请求被重定向到x/y
  3. 请注意,一个是内部重写,而另一个重定向浏览器以显示不那么“丑陋”的网址。

    一个提示:如果您可以使用apaches重写模块(RewriteLogRewriteLogLevel)的日志记录功能,这将为您提供有关重写过程中实际内容的大量详细信息。