mod_rewrite [PT]标志返回错误请求

时间:2012-01-10 11:31:11

标签: .htaccess mod-rewrite friendly-url bad-request

最初,编写此代码是为了创建“漂亮”网址。

使用下面的代码时, mod_rewrite 可以正常工作。

<Directory /var/www/vhosts/myurl.com/httpdocs>
    Options Indexes FollowSymLinks
    php_admin_flag engine on
    php_admin_value open_basedir none
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

RewriteEngine on
RewriteCond %{HTTPS} !=off
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteCond $1 ^(register|account|logout|profile|edit_profile).*$
RewriteRule ^/(.*)$ https://myurl.com/?get=$1 

它需要任何匹配的网址,例如 https://myurl.com/register ,并将其重写为 https://myurl.com/?get=register 。找到相应的页面并在浏览器中显示。

但是,我希望将原始网址传递给浏览器。为实现这一目标,我将 [PT] Flag 添加到我的RewriteRule中,如下所示:

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [PT]

这可以将 https://myurl.com/register (与上面相同的网址)引导至浏览器,但不再显示该页面。相反,它返回以下错误:

Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header

相关信息:

操作系统:Linux
服务器: Apache
控制: Plesk
目录: /var/www/vhosts/myurl.com/conf
文件: vhost_ssl.conf

我搜索过多个论坛和文章都无济于事。

第1条: Making prettier URLs with mod_rewrite(包括使用[PT]标志)

有没有人知道这里发生了什么以及如何解决?如何才能显示“漂亮”网址?

1 个答案:

答案 0 :(得分:0)

经过两天的挫折之后,我终于解开了这个谜题。

首先,我通过改变它来实验 RewriteRule

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [P]

RewriteRule ^/(.*)$ https://myurl.com/index.php?get=$1

没有任何旗帜。

每当触发重写时,都会产生无限循环。但是我注意到循环发生时没有重定向url(保持'漂亮的url')。进步!

我决定简化代码。我从 RewriteCond 中删除了'LA-U:',如下所示:

RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这就是诀窍!感谢那些评论。希望这可以帮助将来的某个人。