Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess mod_为漂亮URL重写不起作用_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php .htaccess mod_为漂亮URL重写不起作用

Php .htaccess mod_为漂亮URL重写不起作用,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,正在尝试获取www.example.com/test.php?archives=testing到www.example.com/archives/testing 根据godaddy的说法,默认情况下他们启用了mod_rewrite 这是我的.htaccess文件: rewriteengine on rewritecond %{HTTP_HOST} ^example.com$ rewriterule ^example\/(.*)$ "http\:\/\/www\.example\.com\/$1"

正在尝试获取www.example.com/test.php?archives=testing到www.example.com/archives/testing

根据godaddy的说法,默认情况下他们启用了mod_rewrite

这是我的.htaccess文件:

rewriteengine on
rewritecond %{HTTP_HOST} ^example.com$
rewriterule ^example\/(.*)$ "http\:\/\/www\.example\.com\/$1" [R=301]
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^archives/(\w+)$ test.php?archives=$1 [L]

但是,这不起作用,当我转到www.example.com/archives/test时,我得到一个404,建议

您需要一些重写条件来指定何时使用此规则。如果没有它们,您将无限期地运行相同的重写规则,从而导致错误。尝试:

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

RewriteRule ^archives/(\w+)$ test.php?archives=$1 [L]

我只是在评论中留下了这个,但我还是把它放在这里,这样更容易看到。我为一个长期以来帮助过别人的人写了一个答案,最终这并不是对你所问问题的回答,但它更像是一块踏脚石。最初的问题是如何处理短url字符串,并使它们以您所寻找的方式工作,而不是将答案复制并粘贴到此处。我让你去那儿读一遍

这并不是说你需要根据你的具体需要对规则做一点修改,但它最终会达到让你达到你想要的目的

这个怎么样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^archives/(.+)$ /test.php?archives=$1 [L]
</IfModule>

重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^archives/(.+)$/test.php?archives=$1[L]

如果你不清楚你想从重写中得到什么,我建议:

Options -MultiViews
ErrorDocument 404 default
RewriteBase /

什么情况下它不起作用?很可能是你的正则表达式,
([a-z]+)$
不适合你。我相信您还需要一些条件来触发规则。它必须工作,即使没有
选项
行。请参阅
访问
重写
日志。Mod_rewrite无法正常工作。我以前在godaddy上托管过一个网站,在url重写方面也有一些问题,但现在工作正常,在我的htaccess文件中,我没有
选项+FollowSymLinks-多视图
RewriteBase/
,也许给我一个机会?@chris,你能给我一个关于如何触发重写的链接吗?这是我不久前给某人的一个简短url呈现的答案。它在概念上是你试图做的事情,但是为了满足你的特殊需要,必须对其进行一些修改。。Rewritecond应该在单独的行上,我正在使用电话,所以格式设置是关闭的。告诉mod rewrite这是最后一个要应用的规则的[L]标志应该与rewrite规则在同一行上,前面有一个空格。感谢您尝试过它,但在转到example.com/test.php?archives=test时没有运气,url保持不变。Mod_rewrite适用于不存在的url,因此您实际上应该将流量定向到example.com/archives/test。Mod rewrite然后默默地将URL重写为实际存在的文件,并显示该文件,而不是不存在的文件