我正在尝试构建一个url shortener,我希望能够在域之后立即获取任何字符并将它们作为变量url传递。例如,
会变成
这就是我现在对mod_rewrite所拥有的,但我一直收到400错误请求:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?url=$1 [L,QSA]
答案 0 :(得分:11)
尝试将^(.*)
替换为^(.*)$
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
修改:尝试将index.php
替换为/index.php
RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]
答案 1 :(得分:1)
ByTheWay不要忘记在ubuntu的apache中启用mod重写
sudo a2enmod rewrite
然后重启apache2
sudo /etc/init.d/apache2 restart
编辑:这是一个老问题,帮助了我,但是我在一边测试了我的apache2.conf文件而在另一边测试了.htaccess文件但仍然没有亮光。
答案 2 :(得分:1)
要重写对/index.php
的所有请求,您可以使用:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.+)$ /index.php?url=$1 [NC,L]
RewriteCondition RewriteCond %{REQUEST_URI} !^/index.php$
非常重要,因为它排除了我们正在重写的重写目标,并防止出现无限循环错误。
答案 3 :(得分:0)
不使用RewriteCond
即可试用。
答案 4 :(得分:0)
在framework文件夹中创建一个.htaccess文件,内容如下
<form class="xForm">
<label for='newName'>file</label>
<input type='text' class='newName' placeholder='new name' />
<input type='button' name='change' class='btnSelected' value='Modify' />
</form>
<form class="xForm">
<label for='newName'>file</label>
<input type='text' class='newName' placeholder='new name' />
<input type='button' name='change' class='btnSelected' value='Modify' />
</form>
然后在 framework/public 文件夹中创建一个包含内容的 .htaccess 文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
通过添加.htaccess 文件,我们可以使网站上的 URL 更加用户友好。 例如,如果我们写一个像
这样的 URL<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule>
将转换为
http://google.com/asdf
出于测试目的,我们在公共文件夹中创建了一个 php index.php 文件,内容如下
http://google.com?url=asdf
如果在浏览器中使用上面的 URL 运行时,结果是 404 not found,很可能没有像步骤 1 那样启用 mod_rewrite。如果结果是 500 Internal Server Error,则可能是写入 .htaccess 出错
答案 5 :(得分:-1)
在Apache模块下检查并确保启用了重写模块。我有一个类似的问题,它通过启用重写模块解决。