Apache -mod_rewrite在内部重定向

时间:2018-06-11 15:40:11

标签: apache mod-rewrite url-rewriting

我尝试使用.htaccess将所有未请求现有文件的请求重定向到入口点php文件。它还应该删除尾部斜杠。

问题是,当它完成重写并进行内部重定向时," new"请求似乎不知道已经完成的重写并且似乎处理了最初的uri。

我做错了什么?

.htacces

RewriteEngine On
RewriteRule ^(.*)/$ /$1 [QSA,L,R]

RewriteCond %{REQUEST_URI} !^/run.php
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^(.*)$ /run.php?r=$1 [QSA,L]

这是生成的日志(因为QSA我最终得到的网址越来越长):

[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test -> test
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] testlying pattern '^(.*)/$' to uri 'test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test -> test
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] testlying pattern '^(.*)$' to uri 'test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] RewriteCond: input='/test' pattern='!^/run.php' => matched
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] RewriteCond: input='/var/www/example/test' pattern='!-f' => matched
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] rewrite 'test' -> '/run.php?r=test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] split uri=/run.php?r=test -> uri=/run.php, args=r=test&c=d
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] trying to replace context docroot /var/www/example with context prefix 
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] internal redirect with /run.php [INTERNAL REDIRECT]
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test/ -> test/
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] testlying pattern '^(.*)/$' to uri 'test/'
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] rewrite 'test/' -> '/test'
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] explicitly forcing redirect with http://localhost:8080/test
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] escaping http://localhost:8080/test for redirect
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] copying r=test&c=d to query string for redirect 
[localhost/sid#7fd22d70dd98][rid#7fd22d63d0a0/initial] [perdir /var/www/example/] redirect to http://localhost:8080/test?r=test&c=d [REDIRECT/302]
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test -> test
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] testlying pattern '^(.*)/$' to uri 'test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test -> test
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] testlying pattern '^(.*)$' to uri 'test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] RewriteCond: input='/test' pattern='!^/run.php' => matched
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] RewriteCond: input='/var/www/example/test' pattern='!-f' => matched
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] rewrite 'test' -> '/run.php?r=test'
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] split uri=/run.php?r=test -> uri=/run.php, args=r=test&r=test&c=d
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] trying to replace context docroot /var/www/example with context prefix 
[localhost/sid#7fd22d70dd98][rid#7fd22d6910a0/initial] [perdir /var/www/example/] internal redirect with /run.php [INTERNAL REDIRECT]
...

PS:只有在我使用现有目录的URI

时才会发生这种情况

0 个答案:

没有答案