不能让.htaccess正常工作

时间:2013-10-16 09:17:03

标签: php regex apache .htaccess mod-rewrite

我正在做一个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?

3 个答案:

答案 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]

参考:Apache mod_rewrite Introduction

答案 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}

希望它有所帮助!!