Mod rewrite 查询字符串的Mod rewrite

Mod rewrite 查询字符串的Mod rewrite,mod-rewrite,Mod Rewrite,Mod Rewrite noob所以请原谅我的无知,但我所要做的只是删除一个简单的查询字符串 发件人:http://yourwebsite.com/x?section=y 收件人:http://yourwebsite.com/x/y 我正在我的.htaccess中添加我的mod rewrite规则,如下所示: ErrorDocument 404 /404 Options +MultiViews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !

Mod Rewrite noob所以请原谅我的无知,但我所要做的只是删除一个简单的查询字符串

发件人:
http://yourwebsite.com/x?section=y

收件人:
http://yourwebsite.com/x/y

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

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]
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]
问题是在访问时:

http://yourwebsite.com/x?section=y
我的规则将其写回:

http://yourwebsite.com/x.php/y
漂亮url中的.php非常难看,我正在努力摆脱它


我的mod rewrite规则出了什么问题?

很可能您正在寻找以下内容:

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]
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]
它进行了两次重写:

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


    提示:如果您可以使用apaches重写模块的日志功能(
    RewriteLog
    RewriteLogLevel
    ),这将为您提供大量关于重写过程中实际发生的情况的详细信息

    很可能存在一个文件
    x.php
    ,因此第一个
    RewriteRule
    匹配并将请求重写到
    x.php
    。正如您配置的那样。那么你想做什么呢?
    x.php
    存在。可通过
    http://yourwebsite.com/x
    。我想要像
    http://yourwebsite.com/x?section=y
    重写为
    http://yourwebsite.com/x/y
    。目前,它们被重写为
    http://yourwebsite.com/x.php/y
    我不想要
    第1点
    。我只想要第2点。我的规则几乎有效,只是我无法摆脱丑陋的.php。在规则应用之后,
    x?section=y
    看起来像
    x.php/y
    那么a)看看我对你的问题的评论:你用你自己的第一个
    RewriteRule
    显式地配置了对x.php的重写,b)我想说你可以更改,但是x.php不会被调用,您将得到一个不存在
    /x
    的错误。问题:当请求
    x/y
    时,您希望执行
    x.php
    (可能使用参数
    section=y
    )还是在内部请求
    x