我正在做一个URL-Shortener,我正在努力做到URL友好..目前我的地址输入类似“example.com/index.php?name=sitename”我想它就像“例子。 com / sitename“..我想我可以使用一些很酷的重写规则,但我不能让它工作..
我做了类似的事情,但它无法正常工作
Options All -Indexes
DirectoryIndex index.php index.html index.htm
RewriteEngine On
RewriteRule ^([^/]*)/$ /index.php?name=$1 [L]
但我不知道:s?
答案 0 :(得分:2)
以下是您需要在DOCUMENT_ROOT/.htaccess
Options All +FollowSymLinks -MultiViews -Indexes
DirectoryIndex index.php index.html index.htm
RewriteEngine On
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?name=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]
# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /index.php?name=$1 [L,QSA]
答案 1 :(得分:1)
在域名后面有多个/
的网址上,您的正则表达式会失败,因为[^/]
会在看到其中一个字符后立即停止,然后它会查找带有{的最后一个斜杠{1}},情况并非总是如此。
假设您要转换这些网址
/$
为:
example.com/HiThere
example.com/Your/Page
请尝试使用此重写规则:
example.com/index.php?name=HiThere
example.com/index.php?name=Your/Page
这将查找RewriteRule ^(.*?)/$ /index.php?name=$1 [L]
所有字符到达最后(.*?)
的所有字符。不过,我对/
标志并不是100%肯定。
答案 2 :(得分:0)
最简单的方法是使用404错误指向index.php,然后使用sitename
获取php
.htaccess文件
ErrorDocument 404 /index.php
PHP代码
<?php
$sitename=substr(strrchr($_SERVER["REQUEST_URI"],"/"),"1");
现在只需访问'example.com/sitename',并且网站名称将存储在$sitename
中。
if($sitename==""){//Show your HomePage}
希望它有所帮助!!