Help with mod_rewrite rule to convert everything after domain to GET
Here is what I have in my .htaccess file:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^$\ [NC]
RewriteRule . ?%{REQUEST_URI} [QSA,L]
The last three lines converts every thing after example.com/ into GET, so example.com/blahblah will become example.com/?blahblah.
开发者_运维技巧My problem is that when %3A%2F%2F
is in the url, it leads to a 404 error. e.g: example.com/blah=http%3A%2F%2Fwww.test.com
will lead to a 404 not found error instead of example.com/?blah=http://www.test.com
Any mod_rewrite gurus can assist?
Here is a rewrite log when this request is made: http://www.example.com/blah=http%3A%2F%2Fwww.test.com
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (2) init rewrite engine with requested uri /favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (1) pass through /favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/favicon.ico -> favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] applying pattern '(.*)' to uri 'favicon.ico'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (4) [perdir /var/www/html/] RewriteCond: input='www.example.com' pattern='^example.com' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/favicon.ico -> favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] applying pattern '^(.*)$' to uri 'favicon.ico'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/favicon.ico' pattern='!-d' => matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/favicon.ico.php' pattern='-f' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/favicon.ico -> favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] applying pattern '.' to uri 'favicon.ico'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/favicon.ico' pattern='!-f' => matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (4) [perdir /var/www/html/] RewriteCond: input='/favicon.ico' pattern='!^$\ [NC]' => matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (2) [perdir /var/www/html/] rewrite 'favicon.ico' -> '?/favicon.ico'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) split uri=?/favicon.ico -> uri=, args=/favicon.ico
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (3) [perdir /var/www/html/] add per-dir prefix: -> /var/www/html/
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (2) [perdir /var/www/html/] strip document_root prefix: /var/www/html/ -> /
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55766f8/initial] (1) [perdir /var/www/html/] internal redirect with / [INTERNAL REDIRECT]
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (2) init rewrite engine with requested uri /
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (1) pass through /
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ ->
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] applying pattern '(.*)' to uri ''
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (4) [perdir /var/www/html/] RewriteCond: input='www.example.com' pattern='^example.com' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ ->
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] applying pattern '^(.*)$' to uri ''
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/' pattern='!-d' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/ ->
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (3) [perdir /var/www/html/] applying pattern '.' to uri ''
[www.example.com/sid#7f0fc51e1860][rid#7f0fc5586f58/initial/redir#1] (1) [perdir /var/www/html/] pass through /var/www/html/
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (2) init rewrite engine with requested uri /example.php
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (1) pass through /example.php
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/example.php -> example.php
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (3) [perdir /var/www/html/] applying pattern '^(.*)$' to uri 'example.php'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/example.php' pattern='!-d' => matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/example.php.php' pattern='-f' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/example.php -> example.php
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (3) [perdir /var/www/html/] applying pattern '.' to uri 'example.php'
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/example.php' pattern='!-f' => not-matched
[www.example.com/sid#7f0fc51e1860][rid#7f0fc55746e8/subreq] (1) [perdir /var/www/html/] pass through /var/www/html/example.php
You may try the NE
flag: http://httpd.apache.org/docs/current/rewrite/flags.html#flag_ne
i had a similary issue:
your
[QSA,L]
should be
[QSA,L,NE]
have a look at
http://httpd.apache.org/docs/current/rewrite/flags.html#flag_ne
enjoy.
精彩评论