http://localhost/clean_urls/user/whtffgh
重定向到此http://localhost/clean_urls/user/whtffgh/
(几乎任何我放在那里的东西)。
http://localhost/clean_urls/user/cohen
然而,重定向到此
http://localhost/clean/
我不明白为什么。它应该只添加/
继承我的.htaccess代码
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /clean_urls/user/$1/ [L,R=301]
RewriteBase /clean_urls/user/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?user=$1
</ifModule>
更新:
当我将cohen作为用户名时,代码也有效。 .htaccess文件的第二部分使user/index.php?user=username
看起来像user/username
所以它只是一个$ _GET变量,在url中看起来不错,并且是SEO友好的(显然)。
我只是在学习这些东西并制作一个webapp来尝试它,所以不确定它的发展方向,但我认为我最终还需要另一个变量。 http:://localhost/clean_urls/user/fred/someverb
答案 0 :(得分:1)
您误解了RewriteBase指令的用途。它帮助重写引擎在“每个目录”上下文中将相对URI转换为正确的文件名等效。
每个.htaccess
文件只应有一个 RewriteBase指令。默认情况下,重写引擎将使用路径上.htaccess
的最低RewriteEngine On
文件,并设置RewriteBase /
指令。
所以在DOCroot(即“GET / xxx”映射到的目录中,这应该是
.htaccess
如果您的DOCroot/clean_urls/user
文件位于RewriteBase /clean_urls/user/
,那么它应该
http:://localhost/fred
您希望如何解码http:://localhost/clean_urls/user/fred/
形式的URI,或者只想要处理http:://localhost/clean_urls/user/fred/someverb
形式的进程URI。那么.htaccess
呢?
让我知道你在哪里{{1}}然后我可以给你正确的内容。